系統環境信息:
操作系統:CentOS release 6.2 (Final)
基礎環境准備:
關閉防火牆:/etc/init.d/iptables stop && chkconfig iptables off
關閉NetworkManager:/etc/init.d/NetworkManager stop && chkconfig NetworkManager off
SeLinux設為disabled: setenforce 0
yum源倉庫的配置:本次部署使用了阿里雲yum源
1) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
2)yum clean all 清除緩存
一、OpenLDAP服務器的搭建
1. 安裝OpenLDAP的相關
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools,其中compat-openldap這個包與主從有很大的關系
[root@rpm ~]# tail -n 1 /etc/passwd ldap:x:55:55:LDAP User:/var/lib/ldap:/sbin/nologin
可以通過rpm -qa |grep openldap查看安裝了哪些包:
[root@rpm ~]# rpm -qa | grep openldap openldap-2.4.40-16.el6.x86_64 openldap-devel-2.4.40-16.el6.x86_64 openldap-clients-2.4.40-16.el6.x86_64 openldap-servers-2.4.40-16.el6.x86_64 openldap-servers-sql-2.4.40-16.el6.x86_64 compat-openldap-2.3.43-2.el6.x86_64
2. 查看OpenLDAP版本,使用:slapd -VV
[root@rpm ~]# slapd -VV @(#) $OpenLDAP: slapd 2.4.40 (Mar 22 2017 06:29:21) $ mockbuild@c1bm.rdu2.centos.org:/builddir/build/BUILD/openldap-2.4.40/openldap-2.4.40/build-servers/servers/slapd
3. OpenLDAP的相關配置文件信息
/etc/openldap/slapd.conf # OpenLDAP的主配置文件,記錄根域信息,管理員名稱,密碼,日志,權限等 /etc/openldap/slapd.d/* # 這下面是slapd.conf配置信息生成的文件,每修改一次配置信息,這里的東西就要重新生成 /etc/openldap/schema/* # OpenLDAP的schema存放的地方 /var/lib/ldap/* # OpenLDAP的數據文件 /usr/share/openldap-servers/slapd.conf.obsolete # 模板配置文件 /usr/share/openldap-servers/DB_CONFIG.example # 模板數據庫配置文件
OpenLDAP監聽的端口:
默認監聽端口:389(明文數據傳輸)
加密監聽端口:636(密文數據傳輸)
注意:從OpenLDAP2.4.23版本開始所有配置數據都保存在/etc/openldap/slapd.d/中,建議不再使用slapd.conf作為配置文件。但是本片博文依舊使用slapd.conf作為配置文件,我們一步一步進行配置和介紹。
4. 初始化OpenLDAP的配置
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # copy數據庫文件 cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf # 此處copy是為了使用slapd.conf
5. 修改配置文件
首先,設置OpenLDAP管理員密碼,拷貝這個到/etc/openldap/slapd.conf里
[root@rpm ~]# slappasswd -s 123456 New password: Re-enter new password: {SSHA}JTudNsYrtbsksTdjxe4bFSwbrt1cF+LD
拷貝秘聞密碼到/etc/openldap/slapd.conf里,這里的rootpw必須頂格寫,而且與后面的密碼文件用Tab鍵隔開,並修改對應序列。

6. 重新生成配置文件信息文件
先檢測/etc/openldap/slapd.conf是否有錯誤
[root@rpm openldap]# slaptest -f /etc/openldap/slapd.conf 5b038945 bdb_db_open: DB_CONFIG for suffix "dc=wangjie,dc=com" has changed. 5b038945 Performing database recovery to activate new settings. 5b038945 bdb_db_open: database "dc=wangjie,dc=com": recovery skipped in read-only mode. Run manual recovery if errors are encountered. config file testing succeeded
授權數據文件,更改文件的所屬
[root@rpm openldap]# chown -R ldap:ldap /var/lib/ldap/ [root@rpm openldap]# ll /var/lib/ldap/ 總用量 984 -rw-r--r-- 1 ldap ldap 4096 5月 22 11:08 alock -rw------- 1 ldap ldap 24576 5月 22 11:08 __db.001 -rw------- 1 ldap ldap 188416 5月 22 11:08 __db.002 -rw------- 1 ldap ldap 270336 5月 22 11:08 __db.003 -rw------- 1 ldap ldap 98304 5月 22 11:08 __db.004 -rw------- 1 ldap ldap 753664 5月 22 11:08 __db.005 -rw------- 1 ldap ldap 32768 5月 22 11:08 __db.006 -rw-r--r-- 1 root root 845 5月 22 10:56 DB_CONFIG -rw------- 1 ldap ldap 8192 5月 18 10:46 dn2id.bdb -rw------- 1 ldap ldap 32768 5月 18 10:46 id2entry.bdb -rw------- 1 ldap ldap 10485760 5月 22 11:08 log.0000000001
我們先重啟slapd生成配置文件。
[root@rpm openldap]# /etc/init.d/slapd restart 停止 slapd: [確定] 正在檢查 slapd 的配置文件: [警告] 5b0389a6 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif" 5b0389a6 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif" config file testing succeeded 正在啟動 slapd: [確定]
接着回到檢測/etc/openldap/slapd.conf是否有錯誤
[root@rpm openldap]# slaptest -f /etc/openldap/slapd.conf config file testing succeeded
rm - rf /etc/openldap/slapd.d/* # 先刪除最先的配置文件生成的信息 slaptest -f/etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ # 重新生成文件
查看是否生成的是自己修改的配置文件信息,修改文件在/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif

重啟:/etc/init.d/slapd restart
[root@rpm openldap]# /etc/init.d/slapd restart
停止 slapd: [確定]
正在啟動 slapd: [確定]
到這里為止,OpenLDAP服務端基本上完成了,我們可以通過PhpLDAPAdmin來登錄看一下,那先得安裝PhpLDAPAdmin
二、PhpLDAPAdmin的搭建
1. 安裝EPEL倉庫,鏡像里沒有PhpLDAPAdmin這個的安裝包,所以得安裝EPEL倉庫,本次使用阿里雲的擴展源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum clean all yum makecache
2. 安裝PhpLDAPAdmin
yum install -y phpldapadmin
3. 修改phpldapadmin的配置文件,訪問控制權限vim /etc/httpd/conf.d/phpldapadmin.conf,允許誰訪問,因為本次實驗環境,先全部允許。

4. 修改配置文件: /etc/phpldapadmin/config.php
$servers->setValue('login','attr','dn'); # 這一行的注釋去掉
$servers->setValue('login','attr','uid'); # 這一行注釋掉
5. 編輯root.ldif,導入管理員帳號信息。
此文件對格式的要求比較大,之前一直報“additional info: dn: attribute type undefined”最后在第一行加了一個空行解決,一直沒有找到原因,如有妥善解決方法的,請留言賜教。
[root@rpm ~]# cat > root.ldif << EOF > >dn: dc=oldwang,dc=com >objectclass: dcObject >objectclass: organization >o: oldwang.com >dc: oldwang > >dn: cn=root,dc=oldwang,dc=com >objectclass: organizationalRole >cn: root >EOF

通過瀏覽器訪問:
也可以通過命令行查詢:ldapsearch -x -b "cn=root,dc=oldwang,dc=com"

三、openLDAP的打開日志信息
1. 現在配置文件里加上日志行 ,這里的日志級別有很多種,-2記錄為info信息。
vim /etc/openldap/slapd.conf 加上loglevel -2

這里修改了配置文件,所有得重新生成配置文件的信息
rm -rf /etc/openldap/slapd.d/* slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ chown -R ldap.ldap /etc/openldap/slapd.d/
2. 在/etc/rsyslog.conf文件中加入
local4.* /var/log/slapd/slapd.log
3. 創建日志文件目錄並修改屬組
mkdir /var/log/slapd chmod 755 /var/log/slapd/ chown ldap.ldap /var/log/slapd/
5. 查看日志信息,tailf /var/log/slapd/slapd.log
四、OpenLDAP與migrationtools實現導入系統賬號的相關信息
本節需要migrationtools工具包,此工具包在之前的安裝中已經統一安裝過,如果之前沒有安裝請按照以下方法安裝
yum -y install migrationtools
1. 修改migrationtools的配置文件,vim /usr/share/migrationtools/migrate_common.ph 修改以下的兩個地方
2. 生成基礎的數據文件,可以自己修改這個生成的base.ldif文件,把不需要的去掉
/usr/share/migrationtools/migrate_base.pl > base.ldif
3. 把base.ldif導入OpenLDAP的數據文件
ldapadd -x -D "cn=root,dc=oldwang,dc=com" -W -f /root/base.ldif
這里會報錯,我們可以通過-c參數強制加入
導入之后,通過PhpLdapAdmin可以看到已經導入進來了
4. 添加用戶及用戶組
創建兩個測試用戶及用戶組,並修改密碼。
[root@rpm ~]# groupadd ldaptest1 [root@rpm ~]# groupadd ldaptest2 [root@rpm ~]# useradd -g ldaptest1 ldaptest1 [root@rpm ~]# useradd -g ldaptest2 ldaptest2 [root@rpm ~]# echo 123456 | passwd --stdin ldaptest1 更改用戶 ldaptest1 的密碼 。 passwd: 所有的身份驗證令牌已經成功更新。 [root@rpm ~]# echo password | passwd --stdin ldaptest2 更改用戶 ldaptest2 的密碼 。 passwd: 所有的身份驗證令牌已經成功更新。
因為此次我們只想將剛創建的兩個用戶導入至openldap數據文件,所以將兩個用戶的相關信息截取出來
[root@rpm ~]# grep ldaptest /etc/passwd > users [root@rpm ~]# grep ldaptest /etc/group > groups
[root@rpm ~]# cat users ldaptest1:x:500:502::/home/ldaptest1:/bin/bash ldaptest2:x:501:503::/home/ldaptest2:/bin/bash [root@rpm ~]# cat groups ldaptest1:x:502: ldaptest2:x:503:
5. 使用migrationtools將兩個臨時用戶生成ldif文件
[root@rpm ~]# /usr/share/migrationtools/migrate_passwd.pl users > users.ldif [root@rpm ~]# /usr/share/migrationtools/migrate_group.pl groups > groups.ldif
查看生成的users.ldif --> cat users.ldif
cn: ldaptest1 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$V9.vDuo7$14R62mGHBJt90XhXX3920lJhf1G7LP35ZWsNgptq6dWvmd1x7PFwQ6D35C7qlNodvmLUt/xjLpiHI39IqpBjP/ shadowLastChange: 17674 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 502 homeDirectory: /home/ldaptest1 dn: uid=ldaptest2,ou=People,dc=oldwang,dc=com uid: ldaptest2 cn: ldaptest2 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$xVYndeJr$zhfe0FwT.3gu.t8rL8ohIHhyrgP90dvBHHsg0ZMQxVyEJ8.jxz7glem/xsllBtayNxms8csiw.JG0GCEZgpEa1 shadowLastChange: 17674 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 501 gidNumber: 503 homeDirectory: /home/ldaptest2
查看生成的group.ldif --> cat group.ldif
dn: cn=ldaptest1,ou=Group,dc=oldwang,dc=com objectClass: posixGroup objectClass: top cn: ldaptest1 userPassword: {crypt}x gidNumber: 502 dn: cn=ldaptest2,ou=Group,dc=oldwang,dc=com objectClass: posixGroup objectClass: top cn: ldaptest2 userPassword: {crypt}x gidNumber: 503
6. 把用戶導入至openLDAP的數據文件
7. 然后在phpLDAPadmin中查看
在這里就已經完成把系統的賬號屬性導入了OpenLDAP,然后就通過添加OpenLDAP用戶,來進行驗證,所以得先做好客戶端的設置
五、OpenLDAP客戶端配置
1. 停掉sssd服務 service sssd stop && chkconfig sssd off
2. 安裝nslcd服務 yum install nss-pam-ldapd
3. 修改 /etc/nslcd.conf 配置文件,下邊四行在原文件中是分散開備注是的,此處合並在一起。
4. 修改 /etc/pam_ldap.conf 配置文件
5. 修改 /etc/pam.d/system-auth 文件,文件中添加下圖標記的行
6. 修改 /etc/nsswitch.conf 配置文件,在此三行后邊增加ldap,修改后,默認登錄的用戶通過本地配置文件進行查找並匹配。當匹配不到用戶信息時,會通過后端配置的LDAP認證服務進行匹配
7. 修改 /etc/sysconfig/authconfig 文件,確保標記的已打開為yes
8. 重啟服務
/etc/init.d/nslcd restart
9. 驗證,通過phpldapadmin增加一個用戶,在ldaptest1的基礎上,復制一個ldaptest3的條目。
首先復制組的條目,也可以直接復制用戶的條目,將組掛到已有的組中。
根據自己的需求更改。
提交,之后自行查看,會發現多了一個新的組信息
通過ldaptest1用戶賦值一個新的用戶條目。
此時復制一個ldaptest3
可以看到已經成功的添加了ldaptest3的用戶,這是OpenLDAP添加的,在本地是沒有的,用cat /etc/passwd 看是沒有ldaptest3用戶的
在/etc/pam.d/system-auth配置文件里添加這一行:session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022
重啟 /etc/init.d/nslcd restart
此時我們進行測試
10. 查看系統用戶列表
客戶端查詢:ldapsearch -H ldap://172.27.1.111 -x -b "ou=People,dc=oldwang,dc=com" |grep dn
服務端查詢:ldapsearch -x -b "ou=People,dc=oldwang,dc=com" |grep dn
查詢單個用戶:ldapsearch -x -b "uid=ldaptest3,ou=People,dc=oldwang,dc=com" | grep dn
[root@rpm ~]# ldapsearch -H ldap://172.27.1.111 -x -b "ou=People,dc=oldwang,dc=com" | grep dn dn: ou=People,dc=oldwang,dc=com dn: uid=ldaptest1,ou=People,dc=oldwang,dc=com dn: uid=ldaptest2,ou=People,dc=oldwang,dc=com dn: uid=ldaptest3,ou=People,dc=oldwang,dc=com [root@rpm ~]# ldapsearch -x -b "ou=People,dc=oldwang,dc=com" | grep dn dn: ou=People,dc=oldwang,dc=com dn: uid=ldaptest1,ou=People,dc=oldwang,dc=com dn: uid=ldaptest2,ou=People,dc=oldwang,dc=com dn: uid=ldaptest3,ou=People,dc=oldwang,dc=com [root@rpm ~]# ldapsearch -x -b "uid=ldaptest3,ou=People,dc=oldwang,dc=com" | grep dn dn: uid=ldaptest3,ou=People,dc=oldwang,dc=com
六、OpenLDAP與ssh
1. 修改 /etc/ssh/sshd_config 文件
2. 修改 /etc/pam.d/sshd 文件,用於第一次登陸的賬戶自動創建家目錄
添加:session required pam_mkhomedir.so
3. 修改 /etc/pam.d/password-auth 文件
4. 重啟ssh:/etc/init.d/sshd restart
七、OpenLDAP限制用戶登錄系統
在賬號中,不能讓每個用戶都能登錄系統,所以要限制用戶登錄
1. 修改 /etc/pam.d/sshd 文件,在這里加上pam_access.so模塊
添加:account required pam_access.so
2. 修改 /etc/security/access.conf 文件,這里限制ldaptest3用戶ssh登錄系統
測試:可以看到只有opentest3登錄不上