• 如何为集中认证安装OpenLDAP服务器


    轻量级目录访问协议(简称LDAP)是一个用于访问目录服务的工业标准的、轻量的、广泛使用的协议集。目录服务是一个用于访问、管理、组织和更新每天的项以及网络资源的共享信息基础设施,诸如用户、组、设备、邮件地址、电话号码、卷以及很多其它对象。

    LDAP信息模型是基于entries。在一个LDAP目录中一个entry代表一个单元或信息并且唯一地被称为标识名(DN)的东西识别。这个entry的每个属性有一个类型以及一个或多个值。

    一个属性是与一个entry关联的一段信息。类型一般是助记字符串,诸如"cn"对应常见名称、或者"mail"对应邮件地址。每个属性被分配一个或多个在空格分隔列表中组成的值。

    以下是一个在LDAP目录中如何排列信息的说明。

    本文讲解在CentOS7和Debain上如何为集中认证安装和配置OpenLDAP服务器。

    第一步:安装LDAP服务器

    1、首先通过以下命令安装OpenLDAP(一个LDAP的开源实现)以及一些传统的LDAP管理工具开始。

    1. # Debain
    2. root@gyl-huawei:/home/blctrl# apt install slapd ldap-utils
    3. # CentOS7
    4. [root@bjAli ~]# yum install openldap openldap-servers openldap-clients nss-pam-ldapd

    Debian上,在这个包安装过程中,将提示你输入在你LDAP目录中用于admin entry的密码,设置一个安全密码并且确认它。

     在安装结束时,你可以按如下解释启动这个服务。

    2、在CentOS7上,运行以下命令来启动openldap服务器守护进程,使它能在系统启动时自动启动并且检查它是否启动并且这个在运行。

    1. [root@bjAli ~]# systemctl start slapd
    2. [root@bjAli ~]# systemctl enable slapd
    3. Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.
    4. [root@bjAli ~]# systemctl status slapd
    5. ● slapd.service - OpenLDAP Server Daemon
    6. Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
    7. Active: active (running) since Tue 2022-09-06 23:30:16 CST; 29s ago
    8. Docs: man:slapd
    9. man:slapd-config
    10. man:slapd-hdb
    11. man:slapd-mdb
    12. file:///usr/share/doc/openldap-servers/guide.html
    13. Main PID: 2649 (slapd)
    14. CGroup: /system.slice/slapd.service
    15. └─2649 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

    3、接着,允许对LDAP服务器的请求通过防火墙。

    1. [root@bjAli ~]# firewall-cmd --add-service=ldap
    2. success

    通过永远启用以下booleans确认SELinux在服务器和客户端都不妨碍。

    [root@localhost ~]# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

    此处基于LDAP的授权需要allow_ypbind,并且可能某些程序需要authlogin_nsswitch_use_ldap。 

    4、由于slapd服务以ldap用户运行(你可以用ps -e -o pid,uname,comm | grep slapd验证它),为了这个服务器能够修改只能由root运行的管理工具创建的entries,这个用户应该拥有/var/lib/ldap目录。

    1. [root@localhost ~]# ps -e -o pid,uname,comm | grep slapd
    2. 20267 ldap slapd

    在更改递归地更改这个目录所有权前,为slapd复制示例数据库配置文件到它中:

    1. [root@localhost ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    2. [root@localhost ~]# chown -R ldap:ldap /var/lib/ldap

    第二步:配置LDAP服务器

    注意:不推荐手动编辑LDAP配置,你需要在一个文件中添加配置并且使用ldapadd或ldapmodify命令来装载它们到LDAP目录。

    4、现在创建一个OpenLDAP管理用户并且为那个用户分配一个密码。在以下命令中,为指定密码创建一个哈希值,记住它,你将在LDAP配置文件中使用它。

    1. [root@localhost ~]# slappasswd
    2. New password:
    3. Re-enter new password:
    4. {SSHA}5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne

    5、接着创建一个LDIF文件(ldaprootpasswd.ldif),其用于添加一个entry到LDAP目录。

    [root@localhost ~]# vim ldaprootpasswd.ldif

    在以上文件中添加以下内容:

    1. dn: olcDatabase={0}config,cn=config
    2. changetype: modify
    3. add: olcRootPW
    4. olcRootPW: {SSHA}5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne

    解释以上的属性-值对:

    • 1) olcDatabase:指明一个特定数据库实例名并且一般能在/etc/openldap/slapd.d/cn=config被找到。
    • 2) cn=config:指明全局的config选项。

    指向先前提供地理论后台,ldaprootpasswd.ldif文件将添加一个entry到这个LDAP目录。在那个entry中,每行代表一个属性:值对(此处dn,changetype, add和olcRootPW是属性,每个冒号右边的字符串是它们对应的值)。

    你会要记住随着深入,并且请注意我们在本文剩下部分使用相同的常见名称(cn=),每一步都取决于前一步。

    6、现在,通过指定指向这个ldap服务器的URI添加相应的LDAP entry,此处只允许协议/主机/端口字段。输出应该类似以下:

    1. [root@localhost ~]# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
    2. SASL/EXTERNAL authentication started
    3. SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    4. SASL SSF: 0
    5. modifying entry "olcDatabase={0}config,cn=config"

    并且从/etc/openldap/schema目录导入一些基本的LDAP定义:

    1. [root@localhost ~]# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
    2. SASL/EXTERNAL authentication started
    3. SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    4. SASL SSF: 0
    5. adding new entry "cn=cosine,cn=schema,cn=config"
    6. SASL/EXTERNAL authentication started
    7. SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    8. SASL SSF: 0
    9. adding new entry "cn=nis,cn=schema,cn=config"
    10. SASL/EXTERNAL authentication started
    11. SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    12. SASL SSF: 0
    13. adding new entry "cn=inetorgperson,cn=schema,cn=config"

    7、使LDAP使用在其数据库中你的域。创建有以下内容的另一个LDIF文件,我们称其ldapdomian.ldif,恰当地替换你的域(在Domain Component dc=)以及密码:

    1. dn: olcDatabase={1}monitor,cn=config
    2. changetype: modify
    3. replace: olcAccess
    4. olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
    5. read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none
    6. dn: olcDatabase={2}hdb,cn=config
    7. changetype: modify
    8. replace: olcSuffix
    9. olcSuffix: dc=mydomain,dc=com
    10. dn: olcDatabase={2}hdb,cn=config
    11. changetype: modify
    12. replace: olcRootDN
    13. olcRootDN: cn=Manager,dc=mydomain,dc=com
    14. dn: olcDatabase={2}hdb,cn=config
    15. changetype: modify
    16. add: olcRootPW
    17. olcRootPW: {SSHA}5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne
    18. dn: olcDatabase={2}hdb,cn=config
    19. changetype: modify
    20. add: olcAccess
    21. olcAccess: {0}to attrs=userPassword,shadowLastChange by
    22. dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
    23. olcAccess: {1}to dn.base="" by * read
    24. olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

    接着,按如下装载它:

    1. [root@localhost ~]# ldapmodify -H ldapi:/// -f ldapdomain.ldif
    2. SASL/EXTERNAL authentication started
    3. SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    4. SASL SSF: 0
    5. modifying entry "olcDatabase={1}monitor,cn=config"
    6. modifying entry "olcDatabase={2}hdb,cn=config"
    7. modifying entry "olcDatabase={2}hdb,cn=config"
    8. modifying entry "olcDatabase={2}hdb,cn=config"
    9. modifying entry "olcDatabase={2}hdb,cn=config"

    8、现在是时候添加一些entries到我们的LDAP目录。在以下称为baseldapdomain.ldif的文件中,我们通过一个冒号分隔属性和值。

    1. dn: dc=mydomain,dc=com
    2. objectClass: top
    3. objectClass: dcObject
    4. objectclass: organization
    5. o: mydomain com
    6. dc: mydomain
    7. dn: cn=Manager,dc=mydomain,dc=com
    8. objectClass: organizationalRole
    9. cn: Manager
    10. description: Directory Manager
    11. dn: ou=People,dc=mydomain,dc=com
    12. objectClass: organizationalUnit
    13. ou: People
    14. dn: ou=Group,dc=mydomain,dc=com
    15. objectClass: organizationalUnit
    16. ou: Group

    添加entries到LDAP目录:

    1. [root@localhost ~]# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
    2. Enter LDAP Password:
    3. adding new entry "dc=mydomain,dc=com"
    4. adding new entry "cn=Manager,dc=mydomain,dc=com"
    5. adding new entry "ou=People,dc=mydomain,dc=com"
    6. adding new entry "ou=Group,dc=mydomain,dc=com"

    9、创建一个称为ldapuser的LDAP用户(adduser ldapuser),接着在ldapgroup.ldif中为一个LDAP组创建定义。

    1. [root@localhost ~]# adduser ldapuser
    2. [root@localhost ~]# vim ldapgroup.ldif

    添加以下内容:

    1. dn: cn=Manager,ou=Group,dc=mydomain,dc=com
    2. objectClass: top
    3. objectClass: posixGroup
    4. gidNumber: 1001

    此处gidNumber是在/etc/group中对应ldapuser的GID并且装载它:

    1. [root@localhost ~]# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
    2. Enter LDAP Password:
    3. adding new entry "cn=Manager,ou=Group,dc=mydomain,dc=com"

    10、为用户ladpuser添加一个带有定义的LDIF文件(ldapuser.ldif):

    1. dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
    2. objectClass: top
    3. objectClass: account
    4. objectClass: posixAccount
    5. objectClass: shadowAccount
    6. cn: ldapuser
    7. uid: ldapuser
    8. uidNumber: 1001
    9. gidNumber: 1001
    10. homeDirectory: /home/ldapuser
    11. userPassword: {SSHA}f5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne
    12. loginShell: /bin/bash
    13. gecos: ldapuser
    14. shadowLastChange: 0
    15. shadowMax: 0
    16. shadowWarning: 0

    并且装载它:

    1. [root@localhost ~]# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
    2. Enter LDAP Password:
    3. adding new entry "uid=ldapuser,ou=People,dc=mydomain,dc=com"

    同样,你可以删除你刚才创建的用户entry:

    ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

    11、允许通信通过防火墙:

    1. [root@localhost ~]# firewall-cmd --add-service=ldap
    2. success

    12、最后,但并非不重要,启用客户端使用LDAP验证。

    在最后一步,我们将使用authconfig工具(一个用于配置系统验证资源的接口)。使用以下命令,如果在对LDAP服务器的身份验证成功后,对应被请求用户的家目录不存在,则创建它:

    [root@localhost ~]#  authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
    
  • 相关阅读:
    Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具
    UEditorPlus v2.2.0发布 VUE示例支持,图片尺寸设定异常修复
    使用python时刻中监控文件夹,记录文件夹中文件异常信息
    MODBUS通信系列之数据处理
    初识Node和内置模块
    4种API性能恶化根因分析
    探索区块链世界:赋能创新,揭示区块链媒体发稿的影响力-世媒讯
    自动化测试中的失败截图和存log
    疫情期间忙于视频会议的你,工作效率真的提高了吗?
    【优化版】DOSBox及常用汇编工具的详细安装教程
  • 原文地址:https://blog.csdn.net/yuyuyuliang00/article/details/126735671