• 配置Linux使用LDAP用户认证


    配置Linux使用LDAP用户认证

    本文首发:https://www.somata.net/2019/linux_ldap_user_auth.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
    

    image.png

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

    image.png
    image.png

    Linux 用户认证部分配置

    我这里设计的用户认证和解析是这样完成的:

    与网上其他人写的会有所不同,需要注意。

    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模块已经有通过SSSD认证的相关模块配置了,我们这里引用以下即可。

    cd /etc/pam.d/
     mv system-auth{,.bak}
     ln -s system-auth-ac system-auth
    

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

    sssd服务配置

    针对LDAP用户登入,PAM配置会将其转发给SSSD,由SSSD来认证用户。下面就是sssd.conf 的配置文件了:

    # file: /etc/sssd/sssd.conf
    
    [domain/black.com]
    autofs_provider = ldap		# 配置 autofs 的提供程序为 ldap
    id_provider = ldap			# id 的提供程序为 ldap
    auth_provider = ldap		# 配置 auth 认证的提供程序为 ldap
    chpass_provider = ldap		# 更改密码 操作时的对用应用
    cache_credentials = True	# 开启缓存
    ldap_search_base = dc=black,dc=com	# ldap 查询的base dn
    ldap_uri = ldap://127.0.0.1/	# ldap 的 URL 路径
    ldap_id_use_start_tls = True	# 开启 ldap 的 tls 加密。
    ldap_tls_reqcert = never	# 不强制要求 tls 加密(这里可以设置为 hard 强制 TLS 加密,如果 tls 无法使用则可能导致服务失败; 由于ldap 与 sssd在同一台,所以不需要 tls 加密)
    ldap_tls_cacertdir = /etc/openldap/cacerts	# ldap 服务 tls 加密信任证书(CA根证书)。
    
    [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来测试可行性。
    image.png
    这里我们也能看到,用户时能登入了的,还有一个瑕疵就是提示没有家目录下面通过脚本来解决。

    脚本

    我为这个LDAP用户认证写了一个脚本,方便添加用户。我这里还是要强调一下,CentOS虽然有提供 migrationtools 工具用于将用户存放至LDAP数据库,但是如果你把本地用户全都提到 LDAP 数据库,不保留本地用户,那么你就会发现,电脑就会无法重启了,所以推荐不要把UID小于1000的用户存放到 LDAP 服务器。
    注:该脚本必须在搭建好上述环境后才可使用,其余环境可能有未知问题。
    脚本放在gitee上了。https://gitee.com/somata/script/blob/master/ldap_adduser.sh
    使用方法很简单
    image.png
    然后再测试一下这个添加的用户是否可以登入:
    image.png
    本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【5AT479HZ】获取授权信息。

  • 相关阅读:
    巧用 Patch Connect Plus 简化 Intune 第三方更新管理
    如何应对薄弱的企业安全意识
    Jira可视化数据分析解决方案
    终端安全:保护企业的关键
    为什么需要ITIL服务目录
    防抖、节流函数封装(站在巨人的肩膀上)
    vue服务器渲染--NUXT
    函数防抖,函数节流(站在巨人的肩膀上)
    MAC地址和IP地址的区别和联系(站在巨人的肩膀上)
    ES8新特性(2017)-- async/await详细介绍与使用
  • 原文地址:https://www.cnblogs.com/somata/p/LinuxLDAPUserAuthentication.html
Copyright © 2020-2023  润新知