折腾了几天OpenLDAP,终于是把它给部署上了。对于软件部署这件事,我的评价是不要完全相信网上任何一篇几年前的教程(包括这篇),可能一些操作是对的,但另一些操作已经过时了,这会导致一些莫名奇妙的错误。配置文件中配置项上一般会有注释,看懂了再改。
OpenLDAP服务端部署
Linux:RockyLinux9
安装相关软件 这步没啥说的,照着安装就行了
1 2 3 dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm dnf upgrade -y dnf install -y openldap openldap-servers openldap-clients nginx phpldapadmin
安装后直接启动,不用顾虑
初始化 首先查看自己的配置文件命令,这很重要。执行ls /etc/openldap/slapd.d/cn\=config/
然后生成密码,执行命令 slappasswd -s your_password
,这会在下面生成一个加密后的密码,如{SSHA}+TszwnXVhnhH5HFGK5Nf4A0xZWGHrmRN,把这个记录下来。
创建以下三个文件
init.ldif
1 2 3 4 5 6 7 8 9 10 dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=admin,dc=pushihao,dc=com - replace: olcSuffix olcSuffix: dc=pushihao,dc=com - replace: olcRootPW olcRootPW: {SSHA}+TszwnXVhnhH5HFGK5Nf4A0xZWGHrmRN
access.ldif
1 2 3 4 dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=pushihao,dc=com" read by * none
base.ldif
1 2 3 4 5 6 7 8 9 10 11 dn: dc=pushihao,dc=com o: PSH Organization dc: pushihao objectClass: top objectClass: dcObject objectclass: organization dn: cn=admin,dc=pushihao,dc=com cn: admin objectClass: organizationalRole description: Directory Manager
文件解读(前两个文件):第一行的dn指定了要修改的条目的唯一标识符,根据刚刚查看的名称来。changetype指定了对条目的修改类型。replace指定了要修改的字段名称,其接下来的一行表示修改后的值。记得把olcRootPW字段替换为刚刚生成的密码。
文件解读(第三个文件):第一段新建一个域,第二段新建了一个管理员。
文件创建好之后执行文件进行修改
1 2 3 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f init.ldif ldapadd -Q -Y EXTERNAL -H ldapi:/// -f access.ldif ldapadd -x -D 'cn=admin,dc=pushihao,dc=com' -w 'your_password' -f base.ldif
导入基本的Schema
1 2 3 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
使用PHPLDAPAdmin管理OpenLDAP 修改/etc/phpldapadmin/config.php
1 2 3 $servers->setValue('login','attr','dn'); $servers->setValue('login','anon_bind',false); $servers->setValue('login','allowed_dns',array('cn=admin,dc=pushihao,dc=com'));
修改解读:第一行表示使用完整的dn作为登录凭据,第二行表示不允许匿名访问,第三行表示仅允许指定的dn进行登录
修改/etc/nginx/nginx.conf,添加一个server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 server { listen 8080; root /usr/share/phpldapadmin/htdocs; index index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME /usr/share/phpldapadmin/htdocs$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
注意fastcgi_pass这个配置项:查看/etc/php-fpm.d/www.conf
这个文件,把fastcgi_pass这个配置项和/etc/php-fpm.d/www.conf
文件中的listen配置项保持一致(它监听9000端口你也监听,它若用套接字你也用套接字)。
配置完成后重启nginxnginx -s reload
即可在浏览器输入ip:8080访问PHPLDAPAdmin的web界面,用户名为cn=admin,dc=pushihao,dc=com,密码为最开始设置的密码(输入未加密的)。
OpenLDAP SSH客户端部署 服务端起来之后就可以根据需求配置各种各样支持ldap的客户端了,ssh是一个常见的需求。这里使用轻量级的nslcd工具。
安装相关软件 没啥说的,装就完了
1 2 3 dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm dnf upgrade -y dnf install -y openldap-clients nss-pam-ldapd
配置nslcd 修改配置文件/etc/nslcd.conf,参考以下内容,灵活修改
1 2 3 4 5 6 7 8 9 uid root gid root uri ldap://ldap-node-01/ base dc=pushihao,dc=com binddn cn=admin,dc=pushihao,dc=com bindpw root ssl no
修改配置文件/etc/nsswitch.conf,参考以下内容,灵活修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 passwd: files ldap sss systemd shadow: files ldap group: files ldap sss systemd hosts: files dns myhostname services: files ldap sss netgroup: files ldap sss automount: files ldap sss aliases: files ethers: files gshadow: files networks: files dns protocols: files publickey: files rpc: files
配置pam 修改/etc/pam.d/password-auth
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authselect is run. auth required pam_env.so auth sufficient pam_unix.so try_first_pass nullok auth sufficient pam_ldap.so use_first_pass # 这里 auth required pam_deny.so account required pam_unix.so account [default=bad success=ok user_unknown=ignore] pam_ldap.so # 这里 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow password sufficient pam_ldap.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_ldap.so # 这里
修改/etc/pam.d/system-auth
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authselect is run. auth required pam_env.so auth sufficient pam_unix.so try_first_pass nullok auth sufficient pam_ldap.so use_first_pass # 这里 auth required pam_deny.so account required pam_unix.so account [default=bad success=ok user_unknown=ignore] pam_ldap.so # 这里 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow password sufficient pam_ldap.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_ldap.so # 这里
修改/etc/ssh/sshd_config
1 2 PasswordAuthentication yes UsePAM yes
重启相关软件 全部配置文件修改完成之后重启相关软件即可
1 systemctl restart sshd nslcd
然后就可以使用在ldap系统中新建的用户通过ssh连接到服务器了。
搞定!