openldap 高可用與自助修改密碼部署


centos7 部署 ldap

  • 需求
名稱 ip地址 cpu 內存
ldap master01 10.65.10.57 4c 8G
ldap master02 10.65.91.52 4c 8G
ldap keepalived vip 10.65.91.88 4c 8G
passwd自主修改密碼服務 10.65.10.56 4c 8G
jenkins、svn、rancher 等要使用統一賬號密碼認證,方便人員管理,因此使用ldap 用來集中認證
1.單台ldap 安裝、創建用戶、密碼設置
2.自助密碼修改服務搭建
3.高可用ldap雙主keepalived 搭建使用

  • 安裝ldap
#關閉selinux
getenforce 
Disabled

#關閉防火牆
systemctl stop firewalld
systemctl disable firewalld

#時間同步
ntpdate  -u cn.ntp.org.cn

#安裝LDAP
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

#生成密碼
slappasswd -s m2i3sc
{SSHA}opZoeJ0qVqOgpv+hEc46uDGeIwMnO4K5

#修改域、管理員信息
vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif 
需要修改內容如下:
olcSuffix: dc=moviebook,dc=cn #修改dc名稱
olcRootDN: cn=admin,dc=moviebook,dc=cn #修改cn名稱、dc名稱
olcRootPW: {SSHA}opZoeJ0qVqOgpv+hEc46uDGeIwMnO4K5 #該行為新增行,指定管理員密碼,該行為新增行(新增加一行)

#修改監控文件信息
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=moviebook,dc=cn" read by * none  #修改dn.base 部分,即dn.base="cn=admin,dc=moviebook,dc=cn"


#查看ldap版本號及檢測
slapd -VV
slaptest -u

#設置DB
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

#修改ldap數據庫配置目錄歸屬用戶
chown ldap:ldap -R /var/lib/ldap

#修改ldap數據庫配置目錄權限
chmod 700 -R /var/lib/ldap

#啟動ldap
systemctl start  slapd
systemctl enable slapd
systemctl status slapd

#導入基本的數據庫schema
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif


#修改migrate_common.ph
vim /usr/share/migrationtools/migrate_common.ph

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "moviebook.cn";

# Default base 
$DEFAULT_BASE = "dc=moviebook,dc=cn";
$EXTENDED_SCHEMA = 1;

  • 安裝httpd
#安裝httpd
yum install httpd -y

#啟動httpd
systemctl start httpd
systemctl enable httpd
systemctl status httpd
  • ldap 創建賬號
#創建基礎目錄
cd /etc/openldap/
# cat 2.ldif 

dn: dc=moviebook,dc=cn
o: ldap
objectclass: dcObject
objectclass: organization
dc: moviebook

#創建目錄結構
ldapadd -x -D "cn=admin,dc=moviebook,dc=cn" -W -f 2.ldif
輸入admin 密碼: m2i3sc

Enter LDAP Password: 
adding new entry "dc=moviebook,dc=cn"

#創建部門員工
# cat 5.ldif 
dn: ou=People,dc=moviebook,dc=cn
ou: People
objectClass: organizationalUnit

dn: cn=zhang.san,ou=People,dc=moviebook,dc=cn
ou: People
cn: zhang.san
sn: People
objectClass: inetOrgPerson
objectClass: organizationalPerson

#創建員工
# ldapadd -x -D "cn=admin,dc=moviebook,dc=cn" -W -f 5.ldif
Enter LDAP Password: 
adding new entry "ou=People,dc=moviebook,dc=cn"

adding new entry "cn=zhang.san,ou=People,dc=moviebook,dc=cn"

  • 使用lam做web管理,搭建ldap account manager 管理Openldap服務
#安裝php
yum install epel-release -y
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel 
systemctl enable php-fpm.service
systemctl start php-fpm.service

yum -y install php*   --skip-broken 

#報錯解決
報錯:rror: php72w-common conflicts with php-common-5.4.16-48.el7.x86_64
yum -y install php*   --skip-broken 

#下載安裝lam
wget https://nchc.dl.sourceforge.net/project/lam/LAM/7.1/ldap-account-manager-7.1.tar.bz2  --no-check-certificate

#解壓
tar jxf ldap-account-manager-7.1.tar.bz2 

#移動到httpd 目錄下
mv ldap-account-manager-7.1 /var/www/html/ldap

#修改參數
cd /var/www/html/ldap/config
cp config.cfg.sample config.cfg
cp unix.conf.sample lam.conf

sed -i "s/dc=my-domain,dc=com/dc=moviebook,dc=cn/g" lam.conf
sed -i "s/cn=Manager/cn=admin/g" lam.conf
sed -i "s/dc=yourdomain,dc=org/dc=moviebook,dc=cn/g" lam.conf

#授權
chown -R apache.apache /var/www/html/ldap/

#重啟httpd
systemctl restart httpd  
systemctl restart php-fpm
  • 訪問 lam
http://10.65.91.52/ldap

輸入密碼 m2i3sc


  • 配置 LAM(起始登錄賬戶非admin 需要配置,為admin 檢查以下配置均可,不必配置)
#1.在登錄界面選擇右上角 LAM 配置
#2.選擇編輯服務器配置文件
#3.密碼默認為  lam
#4.General settings
  Server address: ldap://localhost:389
  Activate TLS: no
  Tree suffix:dc=moviebook,dc=cn
  LDAP search limit:-

Security settings
  Fixed list
  List of valid users: cn=admin,dc=moviebook,dc=cn
  
#5.Account types
  Users:
    LDAP suffix:ou=People,dc=moviebook,dc=cn
    List attributes:#uid;#givenName;#sn;#uidNumber;#gidNumber
  Groups:
    LDAP suffix:ou=group,dc=moviebook,dc=cn
    List attributes:#cn;#gidNumber;#memberUID;#description





  • LDAP Account Manager中創建用戶、創建組
#創建組
組-->新組-->增加組名(運維組)、GID編號 (10000) 以及描述信息--> 保存

#創建用戶
用戶-->新用戶-->姓(劉三)-->電子郵件地址(xxx.q.com)--> 選擇左側ubinx --> 用戶名(liu.san)-->全名(劉三)-->uid編號(10100)-->主要組(運維組)-->左上方設置密碼(123456)




ldap 搭建完成,以上操作均在兩台ldap master 節點上執行部署·

自助密碼修改服務搭建 10.65.10.56

  • 安裝php 環境
#安裝php
yum install epel-release -y
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel 
systemctl enable php-fpm.service
systemctl start php-fpm.service

yum -y install php*   --skip-broken 

#報錯解決
報錯:rror: php72w-common conflicts with php-common-5.4.16-48.el7.x86_64
yum -y install php*   --skip-broken 
  • 安裝httpd
#安裝httpd
yum install httpd -y

#啟動httpd
systemctl start httpd
systemctl enable httpd
systemctl status httpd
  • 配置自助密碼服務
yum install https://ltb-project.org/rpm/6Server/noarch/self-service-password-1.1-1.el6.noarch.rpm

# cat /etc/httpd/conf.d/self-service-password.conf
NameVirtualHost *:80
<VirtualHost *:80>
       ServerName changepasswd.xxx.cn
       DocumentRoot /usr/share/self-service-password
       DirectoryIndex index.php
       AddDefaultCharset UTF-8
      <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>


#配置Self Service Password,支持密碼修改和郵件重置
vim /usr/share/self-service-password/conf/config.inc.php

# LDAP
$ldap_url = "ldap://10.65.91.52:389";
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=moviebook,dc=cn";
$ldap_bindpw = "m2i3sc";
$ldap_base = "dc=moviebook,dc=cn";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";

#配置郵件
$mail_from = "xxx@moviebook.cn";
$mail_from_name = "企業ldap賬號密碼重置";
$mail_signature = "xinliang@moviebook.cn";
# Notify users anytime their password is changed
$notify_on_change = true;
# PHPMailer configuration (see https://github.com/PHPMailer/PHPMailer)
$mail_sendmailpath = '/usr/sbin/sendmail';
$mail_protocol = 'smtp';
$mail_smtp_debug = 2;
$mail_debug_format = 'error_log';
$mail_smtp_host = 'smtp.exmail.qq.com';
$mail_smtp_auth = login;
$mail_smtp_user = 'xxx@moviebook.cn';
$mail_smtp_pass = '123456';
$mail_smtp_port = 25;
$mail_smtp_timeout = 30;
$mail_smtp_keepalive = false;
$mail_smtp_secure = 'tls';
$mail_contenttype = 'text/plain';
$mail_wordwrap = 0;
$mail_charset = 'utf-8';
$mail_priority = 3;
$mail_newline = PHP_EOL;

$keyphrase = "ldapchangepasswda";  #重要參數
#注意
如果遇到報錯 Token encryption requires a random string in keyphrase setting
修改配置: $keyphrase = "secret";   --->  $keyphrase = "ldapchangepasswd"; #任意字符串

#如果安裝完成自助修改密碼功能時候報錯ldap 密碼錯誤,決絕修改,可參考以下參數解決:
$who_change_password = "manager"; 


#配置服務器郵件發送功能
yum install mailx    -y  

vim /etc/mail.rc
set from=xxx@moviebook.cn
set smtp=smtp.exmail.qq.com
set smtp-auth-user=xxx@moviebook.cn
set smtp-auth-password=123456
set smtp-auth=login

#重啟httpd
systemctl restart httpd

#解析域名 changepasswd.xxx.cn 至 10.65.10.56
#登錄 changepasswd.xxx.cn
  • 修改密碼

#打開修改密碼服務,選擇郵件,將會以郵件形式發送至被修改密碼用戶的郵箱,前提是需要在ldap 中添加用戶的郵箱,比如我要修改用戶王強的密碼
打開郵箱,查收郵件



  • 查收郵件並修改
#打開郵箱中郵件地址,修改密碼
修改成功后會郵件提示修改成功



密碼已成功修改~

ldap 雙主高可用keepalived 部署

  • 添加syncprov module,兩個節點上均執行
mkdir /data/
cd /data/

#創建 mod_syncprov.ldif 
# cat mod_syncprov.ldif 
# create new
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

#執行添加操作
ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
  • 創建syncprov.ldif,兩個節點上均執行
# cat syncprov.ldif 
# create new
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint:100 10
olcSpSessionLog: 100

#執行添加操作
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif

  • 准備主主節點的配置文件
#ldap master01 10.65.10.57 配置文件
# cat master01.ldif 
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://10.65.91.52:389/
  bindmethod=simple
  binddn="cn=admin,dc=moviebook,dc=cn"
  credentials=m2i3sc
  searchbase="dc=moviebook,dc=cn"
  scope=sub
  schemachecking=off
  attrs="*,+"
  type=refreshAndPersist
  retry="5 5 300 +"
  interval=interval=00:00:01:00
-
add: olcMirrorMode
olcMirrorMode: TRUE
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: entryCSN eq

#執行
ldapadd -Y EXTERNAL -H ldapi:/// -f master01.ldif -W


#ldap master02 10.65.91.52 配置文件
# cat master02.ldif 
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 2

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://10.65.10.57:389/
  bindmethod=simple
  binddn="cn=admin,dc=moviebook,dc=cn"
  credentials=m2i3sc
  searchbase="dc=moviebook,dc=cn"
  scope=sub
  schemachecking=off
  attrs="*,+"
  type=refreshAndPersist
  retry="5 5 300 +"
  interval=interval=00:00:01:00
-
add: olcMirrorMode
olcMirrorMode: TRUE
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: entryCSN eq


#執行
ldapadd -Y EXTERNAL -H ldapi:/// -f master02.ldif -W

#驗證,登錄ldap master01 LDAP Account Manager 添加用戶zho.lining 操作
登錄 ldap master02 ldap Account Manager 查看用戶已存在

  • keepalived 部署
#安裝 keepalived(兩台機器均執行)
yum -y install keepalived

#10.65.10.57 keepalived配置

# cat /etc/keepalived/keepalived.conf 
global_defs {
     notification_email {
     xinliang_li@moviebook.cn
     }
     notification_email_from root@kubernetes1.yp14.cn
                 smtp_server exmail.qq.com
                 smtp_connect_timeout 30
                 router_id master01_11
}

vrrp_script check_svr {
    script "/moviebook/scripts/chk_server.sh"
    interval 20
    weight 5
 }

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 98
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 10.65.10.57 label eth0:0
    unicast_peer {
        10.65.91.52
    }

    virtual_ipaddress {         ##主節點上的vip
        10.65.91.88/16 dev eth0 label eth0:0
        #vip2 dev eth0 label eth0:1    ##如果每個節點上有多個vip,一個一行填上,只填單個節點上的vip
    }
    
    track_script {
        check_svr
    }
}



#准備/moviebook/scripts/chk_server.sh文件
# cat /moviebook/scripts/chk_server.sh
#!/bin/bash
counter=$(ps -C slapd --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    systemctl start slapd
    sleep 2
    counter=$(ps -C slapd --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
    systemctl stop keepalived
    fi
fi


#授權
chmod  755 /moviebook/scripts/chk_server.sh

#啟動keepalived
systemctl start keepalived
systemctl enable keepalived

#10.65.91.52 keepalived配置
#  cat  /etc/keepalived/keepalived.conf 
global_defs {
     notification_email {
     xinliang_li@moviebook.cn
     }
     notification_email_from root@kubernetes1.yp14.cn
                 smtp_server exmail.qq.com
                 smtp_connect_timeout 30
                 router_id master01_12
}

vrrp_script check_svr {
    script "/moviebook/scripts/chk_server.sh"
    interval 20
    weight 5
 }

vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 98
    priority 80
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 10.65.91.52 label ens192:0
    unicast_peer {
        10.65.10.57
    }

    virtual_ipaddress {         ##主節點上的vip
        10.65.91.88/16 dev ens192 label ens192:1
        #vip2 dev eth0 label eth0:1    ##如果每個節點上有多個vip,一個一行填上,只填單個節點上的vip
    }
    
    track_script {
        check_svr
    }
}


#准備/moviebook/scripts/chk_server.sh文件
# cat /moviebook/scripts/chk_server.sh
#!/bin/bash
counter=$(ps -C slapd --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    systemctl start slapd
    sleep 2
    counter=$(ps -C slapd --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
    systemctl stop keepalived
    fi
fi


#授權
chmod  755 /moviebook/scripts/chk_server.sh

#啟動keepalived
systemctl start keepalived
systemctl enable keepalived



#驗證高可用,對外ldap 將使用10.65.91.88:389 提供服務,測試停止10.65.10.57 ldap、keepalived,虛ip飄至  10.65.91.52,仍然正常使用,rancher 綁定ldap 虛IP使用服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM