一、基礎設置
1.1 環境說明
Centos 7.5 openldap 2.4.44
1.2 關閉防火牆和selinux
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config systemctl stop firewalld.service && systemctl disable firewalld.service firewall-cmd --state
1.3 更新yum源
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/Centos-7.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak mv /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo yum clean all yum makecache
二、安裝 OpenLDAP
2.1 安裝openldap
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
查看版本:slapd -VV
2.2 生成管理員密碼
slappasswd -s Admin123
{SSHA}qtkKhiajMDZpbAS9sS9K4TfnePglsVz4
管理員密碼為:Admin123,下面是對密碼進行加密后的字符串。
2.3 修改olcDatabase={2}hdb.ldif文件
從OpenLDAP2.4.23版本開始所有配置數據都保存在/etc/openldap/slapd.d/中,建議不再使用slapd.conf作為配置文件
vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
#修改
olcSuffix: dc=wmqe,dc=com
olcRootDN: cn=admin,dc=wmqe,dc=com
#添加
olcRootPW: {SSHA}qtkKhiajMDZpbAS9sS9K4TfnePglsVz4
注意:其中cn=admin中的admin表示OpenLDAP管理員的用戶名,而olcRootPW表示OpenLDAP管理員的密碼。
2.4 修改olcDatabase={1}monitor.ldif文件
vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
#修改管理員信息
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=admin,dc=wmqe,dc=com" read by * none
2.5 驗證配置
slaptest -u
5d24c09b ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif" 5d24c09b ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif" config file testing succeeded
2.6 啟動 OpenLDAP
systemctl start slapd
systemctl enable slapd
systemctl status slapd
啟動后監聽 389 端口
三、配置 OpenLDAP
3.1 配置OpenLDAP數據庫
OpenLDAP默認使用的數據庫是BerkeleyDB,現在來開始配置OpenLDAP數據庫,使用如下命令:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap -R /var/lib/ldap chmod 700 -R /var/lib/ldap ll /var/lib/ldap/
注意:/var/lib/ldap/就是BerkeleyDB數據庫默認存儲的路徑。
3.2 導入基本Schema
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
3.3 修改migrate_common.ph文件
migrate_common.ph文件主要是用於生成ldif文件使用。
vim /usr/share/migrationtools/migrate_common.ph $DEFAULT_MAIL_DOMAIN = "wmqe.com"; $DEFAULT_BASE = "dc=wmqe,dc=com"; $EXTENDED_SCHEMA = 1;
#重啟
systemctl restart slapd
到此OpenLDAP的配置就已經全部完畢。
四、添加用戶和組
默認情況下OpenLDAP是沒有普通用戶的,只有一個管理員用戶;管理用戶就是前面配置的 cn=admin,dc=wmqe,dc=com 。
4.1 創建用戶和組
現在我們把系統中的用戶,添加到OpenLDAP中。為了進行區分,我們現在新加兩個用戶ldapuser1和ldapuser2,和兩個用戶組ldapgroup1和ldapgroup2,如下:
groupadd ldapgroup1 groupadd ldapgroup2 useradd -g ldapgroup1 ldapuser1 useradd -g ldapgroup2 ldapuser2 passwd ldapuser1 passwd ldapuser2
4.2 寫入到文件
把剛剛添加的用戶和用戶組屬性信息提取出來
grep "ldapuser" /etc/passwd > /root/users grep "ldapgroup" /etc/group > /root/groups
4.3 生成ldif文件
上述生成的用戶和用戶組屬性,使用migrate_passwd.pl文件生成要添加用戶和用戶組的ldif
/usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif cat users.ldif cat groups.ldif
注意:后續如果要新加用戶到OpenLDAP中的話,我們可以直接修改users.ldif文件即可,或者采用后續需要安裝的phpLDAPadmin工具添加。
4.4 新建基礎數據庫ldif文件
vim /root/base.ldif
dn: dc=wmqe,dc=com o: wmqe com dc: wmqe objectClass: top objectClass: dcObject objectclass: organization dn: cn=admin,dc=wmqe,dc=com cn: admin objectClass: organizationalRole description: Directory Manager dn: ou=People,dc=wmqe,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=wmqe,dc=com ou: Group objectClass: top objectClass: organizationalUnit
注意格式:ldif 文件以空行作為用戶分割,格式要保持一致。
4.5 導入賬號信息到OpenLDAP數據庫
1)導入基礎數據庫
ldapadd -x -w Admin123 -D cn=admin,dc=wmqe,dc=com -f /root/base.ldif
2)導入用戶信息
ldapadd -x -w Admin123 -D cn=admin,dc=wmqe,dc=com -f /root/users.ldif
3)導入用戶組信息
ldapadd -x -w Admin123 -D cn=admin,dc=wmqe,dc=com -f /root/groups.ldif

同時查看BerkeleyDB數據庫文件中多了cn.bdb、sn.bdb、ou.bdb等數據庫文件
ll /var/lib/ldap/
4.6 用戶加入到用戶組
目前OpenLDAP用戶和用戶組之間是沒有任何關聯的,需要新建添加用戶到用戶組的ldif文件。
示例:把ldapuser1用戶加入到ldapgroup1用戶組。
1)新建文件
cat > add_user_to_groups.ldif << EOF dn: cn=ldapgroup1,ou=Group,dc=wmqe,dc=com changetype: modify add: memberuid memberuid: ldapuser1 EOF
2)添加
ldapadd -x -w Admin123 -D cn=admin,dc=wmqe,dc=com -f /root/add_user_to_groups.ldif
3)查看
ldapsearch -LLL -x -w Admin123 -D 'cn=admin,dc=wmqe,dc=com' -b 'dc=wmqe,dc=com' cn='ldapgroup1' #下面輸出信息可看到ldapgroup1組包含用戶為ldapuser1
dn: cn=ldapgroup1,ou=Group,dc=wmqe,dc=com objectClass: posixGroup objectClass: top cn: ldapgroup1 userPassword:: e2NyeXB0fXg= gidNumber: 1000 memberUid: ldapuser1
到這里,基本功能已經配置完成,可以通過phpLDAPadmin進程訪問連接。
五、配置SSL
通過網絡訪問 OpenLDAP 服務器,明文傳輸這些數據存在被他人嗅探的風險。本節設置 LDAP 服務器與客戶端之間的 SSL 連接以加密傳輸數據。
參考:https://docs.oracle.com/en/operating-systems/oracle-linux/7/admin/ol7-s9-auth.html,后續配置證書過程該文章都有介紹。
5.1 創建自簽證書
5.1.1 創建CA證書
cd /etc/openldap/certs #創建CA證書的私鑰 openssl genrsa -out cacert-key.pem 1024 chmod 0400 cacert-key.pem
#創建CA證書請求 openssl req -new -key cacert-key.pem -out cacert.csr 依次輸入: CH,Shanghai,Yangpu,WMQE,IT,www.wmq.com,admin@wmq.com,回車,回車
#創建3年有效期的CA證書 openssl x509 -req -days 1095 -in cacert.csr -signkey cacert-key.pem -out cacert.pem
5.1.2 創建服務器證書
#創建服務證書的私鑰 openssl genrsa -out openldap-key.pem 1024 chmod 0400 openldap-key.pem chown ldap:ldap openldap-key.pem
#創建服務證書請求 openssl req -new -key openldap-key.pem -out openldap-cert.csr 依次輸入: CH,Shanghai,Yangpu,WMQE,IT,ldap.wmq.com,admin@wmq.com,回車,回車
注意:對於Common Name,指定服務器的完全限定域名(FQDN)。如果服務器的FQDN與證書中指定的公用名不匹配,則客戶端無法獲得與服務器的連接。
#簽署服務器證書,有效期3年 openssl x509 -req -days 1095 -CAcreateserial \ -in openldap-cert.csr -CA cacert.pem -CAkey cacert-key.pem \ -out openldap-cert.pem
5.2 更換默認的證書位置
1)查看默認的證書位置
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \ olcTLSCACertificatePath olcTLSCertificateFile olcTLSCertificateKeyFile
2)創建LDIF文件
cat > /root/mod_ssl.ldif << EOF dn: cn=config changetype: modify add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/openldap/certs/cacert.pem - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/openldap.cert - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/openldap.key - add: olcTLSVerifyClient olcTLSVerifyClient: never EOF
3)應用LDIF文件
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/mod_ssl.ldif
4)驗證生效
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \ olcTLSCACertificatePath olcTLSCertificateFile olcTLSCertificateKeyFile olcTLSVerifyClient
5.3 配置監聽636端口
1)停止服務
systemctl stop slapd
2)開啟SSL
vim /etc/sysconfig/slapd SLAPD_LDAPS=yes SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
3)啟動服務
systemctl start slapd
4)查看已監聽 636 端口
netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 2132/slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 2132/slapd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 819/sshd tcp6 0 0 :::636 :::* LISTEN 2132/slapd tcp6 0 0 :::389 :::* LISTEN 2132/slapd tcp6 0 0 :::80 :::* LISTEN 818/httpd tcp6 0 0 :::22 :::* LISTEN 819/sshd
后續對接可以采用加密方式連接:ldaps://192.168.159.130:636
報錯:啟動服務報錯解決
報錯:unable to open file “/var/run/openldap/slapd.args”: 13 (Permission denied) 解決:創建/var/run/openldap/slapd.args並賦予777權限 報錯:unable to open file “/var/run/openldap/slapd.pid”: 13 (Permission denied) 解決:創建/var/run/openldap/slapd.pid並賦予777權限
因為異常結束了服務進程,導致有文件殘留,需要手動創建並賦予777權限,后續正常關閉服務這兩個文件都會自動被刪除。
六、其他功能配置
6.1 開啟日志功能
默認情況下OpenLDAP是沒有啟用日志記錄功能的,但是在實際使用過程中,我們為了定位問題需要使用到OpenLDAP日志。
1)新建日志配置ldif文件:
cat > /root/loglevel.ldif << EOF dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats EOF
2)導入到OpenLDAP中
ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
3)重啟OpenLDAP服務
systemctl restart slapd
4)修改rsyslog配置文件
cat >> /etc/rsyslog.conf << EOF local4.* /var/log/slapd.log EOF
5)並重啟rsyslog服務
systemctl restart rsyslog
6)查看OpenLDAP日志
tail -f /var/log/slapd.log
現在查看會提示文件不存在,需要對ldap進行操作后可以看到有日志輸出。
6.2 禁用匿名訪問
參考:https://www.ilanni.com/?p=14035
默認openldap在匿名情況下是可以被訪問的,而且openldap的相關信息,除了用戶的密碼信息之外,其他openldap的信息完全被呈現出來。
1)新建文件
cat > /root/disable_anon.ldif << EOF dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon dn: cn=config changetype: modify add: olcRequires olcRequires: authc dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcRequires olcRequires: authc EOF
2)導入文件
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/disable_anon.ldif
不用重啟服務即可生效
七、安裝 phpLDAPadmin
7.1 安裝Apache PHP
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
7.2 安裝 phpldapadmin
yum --enablerepo=epel -y install phpldapadmin
7.3 修改phpldapadmin配置文件
vim /etc/phpldapadmin/config.php #打開 dn 注釋,注釋掉uid $servers->setValue('login','attr','dn'); // $servers->setValue('login','attr','uid');
phpldapadmin默認使用的是uid方式進行登錄,改為dn認證。
7.4 修改httpd配置文件
修改httpd與phpldapadmin集成的配置文件,把httpd與phpldapadmin進行集成。
vim /etc/httpd/conf.d/phpldapadmin.conf
Require all granted
將Require local 改為 Require all granted
7.5 啟動httpd
systemctl start httpd
systemctl enable httpd
systemctl status httpd
監聽80端口
訪問:http://192.168.159.130/phpldapadmin,登入賬號:cn=admin,dc=wmqe,dc=com, 密碼:Admin123
登入后可以看到已經有之前創建的用戶和組了:

八、自助修改密碼系統
8.1 安裝Self Service Password
1)配置Self Service Password的yum倉庫源
cat >> /etc/yum.repos.d/ltb-project.repo << EOF [ltb-project-noarch] name=LTB project packages (noarch) baseurl=https://ltb-project.org/rpm/\$releasever/noarch enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project EOF
2)安裝
yum -y install self-service-password
查看下Self Service Password安裝的文件,如下:
rpm -ql self-service-password
看出被安裝到 /usr/share/self-service-password 目錄下,其中 config.inc.php 是 Self Service Password 的配置文件。
8.2 修改配置文件
1)修改apache配置文件
前面phpLDAPadmin采用apache,這里就不用再次安裝了,直接修改配置文件就行。(也可以采用nginx)
cp /etc/httpd/conf.d/self-service-password.conf /etc/httpd/conf.d/self-service-password.conf-bak
cat > /etc/httpd/conf.d/self-service-password.conf << EOF <VirtualHost *> DocumentRoot /usr/share/self-service-password DirectoryIndex index.php AddDefaultCharset UTF-8 Alias /ssp /usr/share/self-service-password <Directory "/usr/share/self-service-password"> AllowOverride None Require all granted </Directory> LogLevel warn ErrorLog /var/log/httpd/ssp_error_log CustomLog /var/log/httpd/ssp_access_log combined </VirtualHost> EOF
參考官網配置:https://ltb-project.org/documentation/self-service-password/1.2/config_apache
2)修改Self Service Password的配置文件
vim /usr/share/self-service-password/conf/config.inc.php #配置LDAP $ldap_url = "ldap://127.0.0.1:389"; $ldap_starttls = false; $ldap_binddn = "cn=admint,dc=wmqe,dc=com"; $ldap_bindpw = "Admin123"; $ldap_base = "ou=People,dc=wmqe,dc=com"; $ldap_login_attribute = "uid"; $ldap_fullname_attribute = "cn"; $ldap_filter = "(&(objectClass=inetOrgPerson)($ldap_login_attribute={login}))"; $who_change_password = "manager"; #指定LDAP以什么用戶身份更改密碼 $keyphrase = "wmqe"; #配置郵件 $mail_from = "xxxxx@qq.com"; $mail_from_name = "LDAP賬號密碼重置"; $mail_signature = ""; #mail簽名 $notify_on_change = false; $mail_sendmailpath = '/usr/sbin/sendmail'; $mail_protocol = 'smtp'; $mail_smtp_debug = 0; $mail_debug_format = 'html'; $mail_smtp_host = 'smtp.qq.com'; $mail_smtp_auth = true; $mail_smtp_user = 'xxxxx@qq.com'; #發送郵箱的賬號 $mail_smtp_pass = 'xxxxxxx'; #發送郵箱的密碼 $mail_smtp_port = 25; $mail_smtp_timeout = 30; $mail_smtp_keepalive = false; $mail_smtp_secure = 'ssl'; $mail_contenttype = 'text/plain'; $mail_wordwrap = 0; $mail_charset = 'utf-8'; $mail_priority = 3; $mail_newline = PHP_EOL;
#禁用問題驗證
$use_questions=false;
#禁用短信驗證
$use_sms= false;
參考官網配置:
配置ldap:https://ltb-project.org/documentation/self-service-password/1.2/config_ldap
配置郵箱:https://ltb-project.org/documentation/self-service-password/1.2/config_mail
8.3 重啟httpd並訪問
systemctl restart httpd
瀏覽器訪問:http://192.168.159.130/

8.4 其他配置
vim /usr/share/self-service-password/conf/config.inc.php # 去除logo $logo = ""; # 默認界面為郵箱找回 $default_action = "sendtoken"; # 去除修改密碼界面 $use_change = false;
參考:
https://www.cnblogs.com/rocky24/p/11082838.html
https://www.ilanni.com/?p=13775
https://www.cnblogs.com/imcati/p/9396808.html
