OpenLDAP + phpLDAPadmin

1、基礎設置

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

 

2、安裝 OpenLDAP

2.1 安裝openldap

yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

查看版本:slapd -VVphp

2.2 生成管理員密碼

slappasswd -s Admin123

{SSHA}qtkKhiajMDZpbAS9sS9K4TfnePglsVz4

管理員密碼爲:Admin123,下面是對密碼進行加密後的字符串。html

2.3 修改olcDatabase={2}hdb.ldif文件

從OpenLDAP2.4.23版本開始全部配置數據都保存在/etc/openldap/slapd.d/中,建議再也不使用slapd.conf做爲配置文件linux

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管理員的密碼。nginx

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 -usql

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 端口數據庫

 

3、配置 OpenLDAP

3.1 配置OpenLDAP數據庫

OpenLDAP默認使用的數據庫是BerkeleyDB,如今來開始配置OpenLDAP數據庫,使用以下命令:apache

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數據庫默認存儲的路徑。vim

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文件使用。api

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的配置就已經所有完畢。瀏覽器

 

4、添加用戶和組

默認狀況下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進程訪問鏈接。

 

5、配置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、其餘功能配置

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

不用重啓服務便可生效

 

7、安裝 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、自助修改密碼系統

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;

 

  

參考:
http://www.javashuo.com/article/p-vdzeoilx-hy.html

https://www.ilanni.com/?p=13775

http://www.javashuo.com/article/p-gtympnxl-nt.html

相關文章
相關標籤/搜索