ldap是开源的轻量级目录访问协议,英文全称是Lightweight Directory Access Protocol,它本身是一个小型文件数据库,能够通过server + client(服务端+客户端)的方式,进行统一的用户账号管理。随着公司研发人员越来越多,在各个研发服务器上添加重复账号就变得麻烦,如果使用ldap来管理,就只需要在ldap服务中创建一次就可以了,账号清理也是类似的道理。我们通过控制一台ldap server服务器,即可管理所有ldap client服务器上的账号,这样就方便很多了。
在内网环境中,服务器名称最好是唯一的,比如改成saturn.com。
sudo hostnamectl set-hostname saturn.com
修改完成后,可以用以下命令确认:
hostname -f
编辑/etc/hosts文件。
sudo vim /etc/host
在文件底部添加:
192.168.0.1 saturn.com
sudo apt -y install slapd ldap-utils
在安装过程中,会提示设置ldap admin的密码。
安装完成后可以通过slap命令验证,正常会显示ldap database的内容,重要的是确认database的dn, 这里为dc=saturn,dc=com
sudo slapt
ldap database里的内容只能通过文件名后缀为.ldif的文件进行添加,或者通过Web工具(OpenLDAP没有自带的Web工具,下面会介绍LDAP account manager 工具)。
创建basedn.ldif文件并且编辑。
touch basedn.ldif
vim basedn.ldif
在basedn.ldif中添加以下内容,注意dn中要用dc=saturn, dc=com。
dn: ou=people,dc=saturn,dc=com
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=saturn,dc=com
objectClass: organizationalUnit
ou: groups
用下面命令将文件的内容添加到database中:
ldapadd -x -D cn=admin,dc=saturn,dc=com -W -f basedn.ldif
成功的话会显示类似的提示:
adding new entry "ou=people,dc=saturn,dc=com"
adding new entry "ou=groups,dc=saturn,dc=com"
用slappasswd命令生成账户密码,网上查询slappasswd命令是用来修改ldap admin密码的,但是仅仅用这个命令好像不 能直接修改admin的密码,安全起见,可以用网站http://web.chacuo.net/safeldap 在线生成ldap加密的密码。
sudo slappasswd
New password:
Re-enter new password:
{SSHA}Zn4/E5f+Ork7WZF/alrpMuHHGufC3x0k
创建ladpuseradd.ldif文件并且编辑。
touch ldapuseradd.ldif
vim ldapuseradd.ldif
在ladpuseradd.ldif中添加以下内容, 比如创建一个用户名为han.meimei的ldap账号:
dn: uid=han.meimei,ou=people,dc=saturn,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: han.meimei
sn: meimei
userPassword: {SSHA}Zn4/E5f+Ork7WZF/alrpMuHHGufC3x0k
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/han.meimei
其中uid跟cn是设置ldap账号的用户名,sn设置用户的昵称,uidNumber跟gidNumber就是linux系统下用户的uid跟gid,注意添加不同账号时uidNumber保持不同,不然在linux terminal中显示的路径可能会有问题,gidNumber可以保持一致,让用户在同一个组里,统一管理权限。userPassword后面可以填写用网站http://web.chacuo.net/safeldap在线生成的其他加密密码,之后用LDAP account manager也可以修改账户信息及密码。
用下面命令将文件的内容添加到database中:
ldapadd -x -D cn=admin,dc=saturn,dc=com -W -f ldapuseradd.ldif
成功的话会显示类似的提示:
adding new entry "uid=han.meimei,ou=people,dc=saturn,dc=com"
ldap用命令行管理database比较麻烦,可以用辅助Web工具phpLDAPadmin,LDAP Account Manager等,这里推荐使用 LDAP Account Manager。
安装PHP, Apache。
sudo apt -y install apache2 php php-cgi libapache2-mod-php php-mbstring php-common php-pear
激活php-cgi PHP extension。
通用命令:
sudo a2enconf php*-cgi
sudo systemctl reload apache2
Ubuntu 18.04:
sudo a2enconf php7.2-cgi
sudo systemctl reload apache2
安装LDAP Account Manager。
sudo apt -y install ldap-account-manager
安装完成后可以在浏览器中登入LAM的管理界面,http://(server’s hostname or IP address)/lam, 在本例中为http://192.168.0.1/lam。界面如下图:
然后需要设置ldap server profile, 点击登入界面左上角的LAM configuration,然后点击Edit server profiles。
需要输入登入密码,第一次登入的话默认密码是 lam。
接下来第一件事情是会让你修改密码。
然后需要设置ldap Server address 和 Tree suffix。
在Security setting中设置admin。
点击Account types页,在Active account types中设置LDAP suffix 和List attributes。
完成后再在部点击Save按钮,重新用admin账号登入,成功跟本地ldap database关联的话,就能看到之前添加的han.meimei账号的信息。我们可以之后直接在LAM上添加账号或者修改账号信息。
编辑/etc/hosts文件
sudo vim /etc/hosts
在文件底部添加:
192.168.0.1 saturn.com
sudo apt -y install libnss-ldap libpam-ldap ldap-utils nscd
在安装过程中,会有如下提示:
设置ldap api,这里填写ldap server的IP: 192.168.0.1
设置dn base,填写dc=saturn,dc=com
选择ldap version,选择3
选择Yes 对Make local root Database admin
选择No 对Does the LDAP database require login
设置 LDAP root account,这里为cn=admin,dc=saturn,dc=com
设置LDAP root account密码,与server端保持一致
安装完成后,安装过程中的配置会保存在/etc/ldap.config中,如果需要修改ldap配置,可以再次修改这个配置文件。在本例中ldap client 一开始没有连上server端,需要将在ldap.config文件中注释的一行#uri ladp://127.0.0.1/ 改成uri ladp://192.168.0.1:389方才可行,ldap server默认使用TCP 389 端口。
sudo auth-client-config -t nss -p lac_ldap
sudo pam-auth-update
passwd: compat systemd ldap
group: compat systemd ldap
shadow: compat
如果之后这个服务器想取消使用ldap,把增加的ldap删除即可。
修改后 应该显示类似的:
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
在/etc/pam.d/common-session中添加:
session optional pam_mkhomedir.so skel=/etc/skel umask=077
sudo systemctl restart nscd
sudo systemctl enable nscd
在上述步骤完成后,可以用很多方式验证ldap client是否与server建立联系:
至此ldap搭建完成,在没有创建local账号的情况下,ldap server端的服务器也能通过ldap账号鉴权登入。
参考资料:
https://computingforgeeks.com/install-and-configure-openldap-server-ubuntu/
https://computingforgeeks.com/install-and-configure-ldap-account-manager-on-ubuntu/
https://computingforgeeks.com/how-to-configure-ubuntu-as-ldap-client/
https://blog.eldernode.com/install-ldap-client-on-ubuntu-20-04/