欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

配置Linux使用LDAP用户认证

程序员文章站 2022-04-12 19:06:14
配置Linux使用LDAP用户认证 本文首发:https://www.cnblogs.com/somata/p/LinuxLDAPUserAuthentication.html 我这里使用的是CentOS完成的LDAP用户管理,可能与网上的大部分教程不同,不过写出来了,那么是肯定能用的了,不过会有部 ......

配置linux使用ldap用户认证

本文首发:https://www.cnblogs.com/somata/p/linuxldapuserauthentication.html

我这里使用的是centos完成的ldap用户管理,可能与网上的大部分教程不同,不过写出来了,那么是肯定能用的了,不过会有部分文件,忘指教。
这里使用的 openldap 配合 centos7 完成的用户管理,需要配置 nssswitch 、pam 和 sssd 3个服务,需要先有一定的了解才能完成本文的配置。

基础配置

  1. 完成yum源的配置
mkdir /root/back
tar -jcvf /root/back/yum.repos.d-`date  '+(%y.%m.%d_%h:%m:%s)'`.tar.xz /etc/yum.repos.d/
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-7.repo
curl -o /etc/yum,repos.d/centos-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
  1. 安装必要软件
yum -y install vim bash-completion openldap-servers openldap-clients nss-pam-ldapd sssd

openldap服务初始化

初始化过程就不再过多赘述,详细查询《openldap 服务搭建和后期管理》。

  1. 首先停止数据库服务:
systemctl stop slapd
  1. 然后编辑文件:
# 首先备份文件,以免无法复原
mkdir /root/back
tar -jcvf /root/back/slapd.config-`date  '+(%y.%m.%d_%h:%m:%s)'`.tar.xz /etc/openldap/slapd.d/
tar -jcvf /root/back/slapd.data-`date  '+(%y.%m.%d_%h:%m:%s)'`.tar.xz /var/lib/ldap/
# 然后再删除配置文件
rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
# 复制配置文件到临时目录
mkdir /root/ldap
cd /root/ldap
  1. 编写slapd的配置文件。这里的配置文件是从 /usr/share/openldap-servers/slapd.ldif 中演变而来的,主要修改了basedn(suffix), openldaptls,olcrootpw(密码由 slappasswd 生成,本文中的密码为: 123456) 和 include。
# file: /root/ldap/slapd.ldif

dn: cn=config
objectclass: olcglobal
cn: config
olcargsfile: /var/run/openldap/slapd.args
olcpidfile: /var/run/openldap/slapd.pid
olctlscertificatefile: /etc/openldap/certs/server.crt
olctlscertificatekeyfile: /etc/openldap/certs/server.key
olctlscacertificatefile: /etc/openldap/cacerts/cacert.pem

dn: cn=schema,cn=config
objectclass: olcschemaconfig
cn: schema

include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif

dn: olcdatabase=frontend,cn=config
objectclass: olcdatabaseconfig
objectclass: olcfrontendconfig
olcdatabase: frontend

dn: olcdatabase=config,cn=config
objectclass: olcdatabaseconfig
olcdatabase: config
olcaccess: to * 
  by dn.base="gidnumber=0+uidnumber=0,cn=peercred,cn=external,cn=auth" manage 
  by * none

dn: olcdatabase=monitor,cn=config
objectclass: olcdatabaseconfig
olcdatabase: monitor
olcaccess: to * 
  by dn.base="gidnumber=0+uidnumber=0,cn=peercred,cn=external,cn=auth" read 
  by dn.base="cn=manager,dc=black,dc=com" read 
  by * none

dn: olcdatabase=hdb,cn=config
objectclass: olcdatabaseconfig
objectclass: olchdbconfig
olcdatabase: hdb
olcsuffix: dc=black,dc=com
olcrootdn: cn=manager,dc=black,dc=com
olcrootpw: {ssha}l1vbi/homkleiqzgcm3co+hfqi68rh1q
olcdbdirectory: /var/lib/ldap
olcdbindex: objectclass eq,pres
olcdbindex: ou,cn,mail,surname,givenname eq,pres,sub
  1. 配置openssl的证书。为openldap服务器的加密隧道使用。
# 首先是创建ca服务的证书文件
cd /etc/pki/ca
openssl genrsa -out private/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem   # 这里的证书创建过程就省略不写了。
# 不过需要注意的是,必须要保证后面服务器证书申请的开头部分必须与证书开头相同,否则无法通过ca签发证书。
touch index.txt
echo "01" > serial
# 然后申请签发服务器证书
cd /etc/openldap/certs/
openssl genrsa -out server.key 2048
openssl ca -in server.csr -out server.crt -days 365
# 复制ca证书到指定位置
mkdir /etc/openldap/cacerts
cp /etc/pki/ca/cacert.pem /etc/openldap/cacerts/
  1. 根据配置生成服务器的配置文件
slapadd -f "/etc/openldap/slapd.d/" -b "cn=config" -l slapd.ldif
# 这里还需要注意文件属主还是root的,需要改回为openldap
chown -r ldap:ldap /etc/openldap/slapd.d/*
# 然后再开启服务即可
systemctl start slapd

_#################### 100.00% eta   none elapsed            none fast!          
closing db...

  1. 初始化数据库
dn: dc=black,dc=com
dc: black
objectclass: top
objectclass: domain

dn: cn=manager,dc=black,dc=com
objectclass: organizationalrole
cn: manager
description: ldap manager

dn: ou=people,dc=black,dc=com
ou: people
objectclass: top
objectclass: organizationalunit
objectclass: domainrelatedobject
associateddomain: black.com

dn: ou=group,dc=black,dc=com
ou: group
objectclass: top
objectclass: organizationalunit
objectclass: domainrelatedobject
associateddomain: black.com
  1. 导入至数据库
ldapadd -x -d "cn=manager,dc=black,dc=com" -w 123456 -f  base.ldif  # 将基础信息导入数据库。

adding new entry "dc=black,dc=com"
adding new entry "cn=root,dc=black,dc=com"
adding new entry "ou=people,dc=black,dc=com"
adding new entry "ou=group,dc=black,dc=com"

  1. 那么再使用apache directory studio来查看 服务器是否配置成功。

首先先将防火墙开启

firewall-cmd --add-service=ldap

配置Linux使用LDAP用户认证

  1. 我们这里先导入一个用户用于后面的测试使用

配置Linux使用LDAP用户认证
配置Linux使用LDAP用户认证

nss 、pam 和 sssd 配置

nss服务配置

如果想使 nss 可以查询ldap,那么首先就需要启用一个叫 nslcd 的服务, 以下是该服务的配置文件。

# file: /etc/nslcd.conf

uid nslcd
gid ldap
uri ldap://127.0.0.1/
base dc=black,dc=com
binddn cn=manager,dc=black,dc=com
bindpw 123456
ssl no
tls_cacertdir /etc/openldap/cacerts

启动服务

chmod 600 /etc/nslcd.conf
systemctl start nslcd
systemctl enable nslcd

配置nss

# file: /etc/nsswitch.conf

passwd:     files ldap          # 主要就是 passwd、shadow 和 group 这3行需要后面添加ldap
shadow:     files ldap
group:      files ldap
hosts:      files dns myhostname
bootparams: nisplus [notfound=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss
netgroup:   nisplus sss
publickey:  nisplus
automount:  files nisplus sss
aliases:    files nisplus

测试是否可用:

getent passwd | grep black

black❌1001:1001:black:/home/black:/bin/bash

pam服务配置

这里pam的配置文件我是从另一台使用authconfig-tui 配置内容拷过来的。

# file: /etc/pam.d/system-auth

auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        [default=1 ignore=ignore success=ok] pam_succeed_if.so uid >= 1000 quiet
auth        [default=1 ignore=ignore success=ok] pam_localuser.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

pam不用进行服务重启,直接可以使用

sssd服务配置

针对ldap用户登入,pam配置会将其转发给sssd,由sssd来认证用户。

# file: /etc/sssd/sssd.conf

[domain/black.com]
autofs_provider = ldap
cache_credentials = true
ldap_search_base = dc=black,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://127.0.0.1/
ldap_id_use_start_tls = true
ldap_tls_reqcert = never
ldap_tls_cacertdir = /etc/openldap/cacerts

[sssd]
services = nss, pam, autofs
domains = black.com

[nss]
homedir_substring = /home

[pam]

[sudo]

[autofs]

[ssh]

[pac]

[ifp]

[secrets]

[session_recording]

配置启动服务,并且设置开机自启动。

chmod 600 /etc/sssd/sssd.conf   # 注意权限的配置,否则无法启动。
systemctl start sssd
systmctl enable sssd

测试

那么这样用户认证的部分就制作好了,那么现在来测试一下:
因为配置的 system-auth 文件,并没有配置 ssh 文件,所以ssh是连接不进去的。因此这里使用login来测试可行性。
配置Linux使用LDAP用户认证

脚本

我为这个ldap用户认证写了一个脚本,方便添加用户。我这里还是要强调一下,centos虽然有提供 migrationtools 工具用于将用户存放至ldap数据库,但是如果你把本地用户全都提到 ldap 数据库,不保留本地用户,那么你就会发现,电脑就会无法重启了,所以推荐不要把uid小于1000的用户存放到 ldap 服务器。
脚本放在gitee上了。
使用方法很简单
配置Linux使用LDAP用户认证
然后再测试一下这个添加的用户是否可以登入:
配置Linux使用LDAP用户认证
本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【5at479hz】获取授权信息。