LDAP部署及實踐


1、安裝ldap

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

 migrationtools 實現OpenLDAP 用戶及用戶組的添加,migrationtools 開源工具通過查找/etc/passwd、/etc/shadow、/etc/groups 生成LDIF 文件,並通過ldapadd 命令更新數據庫數據,完成用戶添加

2、查看版本

[root@192 ~]# slapd -V
@(#) $OpenLDAP: slapd 2.4.44 (Jan 29 2019 17:42:45) $
        mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

[root@192 ~]# 

從OpenLDAP2.4.23版本開始所有配置數據都保存在/etc/openldap/slapd.d/中,不再使用slapd.conf作為配置文件。

 

3、設置openldap的管理員密碼:

[root@192 ~]# slappasswd -s 123
{SSHA}FbSX+pFZE9V9+zxG/FyZWX8XtzRBDwJl
[root@192 ~]# 

上述加密后的字段保存下,等會我們在配置文件中會使用到。

 

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

[root@192 ~]# cd /etc/openldap/slapd.d/cn=config
[root@192 cn=config]# ll
total 24
drwxr-x---. 2 ldap ldap 4096 May  1 19:49 cn=schema
-rw-------. 1 ldap ldap  378 May  1 19:33 cn=schema.ldif
-rw-------  1 ldap ldap  624 May  1 19:48 olcDatabase={0}config.ldif
-rw-------. 1 ldap ldap  443 May  1 19:33 olcDatabase={-1}frontend.ldif
-rw-------. 1 ldap ldap  562 May  1 19:33 olcDatabase={1}monitor.ldif
-rw-------. 1 ldap ldap  609 May  1 19:33 olcDatabase={2}hdb.ldif
[root@192 cn=config]# vi olcDatabase\=\{2\}hdb.ldif 

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 2b91b3bd
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 5f5347b6-1feb-103a-867d-35e9e57544e1
creatorsName: cn=config
createTimestamp: 20200501113350Z
entryCSN: 20200501113350.128694Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20200501113350Z

修改域信息

olcSuffix: dc=asiainfo,dc=com
olcRootDN: cn=root,dc=asiainfo,dc=com
olcRootPW: {SSHA}FbSX+pFZE9V9+zxG/FyZWX8XtzRBDwJl

注意:冒號后面一定加空格,其中cn=root中的root表示OpenLDAP管理員的用戶名,而olcRootPW表示OpenLDAP管理員的密碼,即上面生成的密碼。

LDAP是一種通訊協議,如同HTTP是一種協議一樣的!

LDAP連接服務器的連接字串格式為:ldap://servername/DN

其中DN有三個屬性,分別是CN,OU,DC 

CN, OU, DC 都是 LDAP 連接服務器的端字符串中的區別名稱(DN, distinguished   name)

CN:Common Name 為用戶名或服務器名,最長可以到80個字符,可以為中文;

DC:Domain Component   domain component一般為公司名,例如:dc=163,dc=com

DN:Distinguished Name  distinguished name為一條LDAP記錄項的名字,有唯一性,例如:dc:"cn=admin,ou=developer,dc=163,dc=com"

DN可以表示為ldap的某個目錄,也可以表示成目錄中的某個對象,這個對象可以是用戶等。 

上邊來了一堆的名詞解釋,看的雲里霧里,還不是很明白,怎么跟自己的組織架構對應起來呢?看看下邊的圖是不是清晰明了

 

 

5、修改完可以測試配置信息是否正確

[root@192 cn=config]# slaptest -u
5eac4b21 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded
[root@192 cn=config]# 

 

6、啟動ldap

systemctl start slapd

 

 

7、配置ldap數據庫

OpenLDAP默認以Berkeley DB作為后端數據庫,BerkeleyDB數據庫主要以散列的數據類型進行數據存儲,如以鍵值對的方式進行存儲。

BerkeleyDB是一類特殊的面向查詢進行優化、面向讀取進行優化的數據庫,主要用於搜索、瀏覽、更新查詢操作,一般對於一次寫入數據、多次查詢和搜索有很好的效果。BerkeleyDB不支持事務型數據庫(MySQL、MariDB、Oracle等)所支持的高並發的吞吐量以及復雜的事務操作。

現在來開始配置OpenLDAP數據庫,使用如下命令:

[root@192 cn=config]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@192 cn=config]# chown ldap:ldap -R /var/lib/ldap
[root@192 cn=config]# chmod 700 -R /var/lib/ldap
[root@192 cn=config]# 

注意:/var/lib/ldap/就是BerkeleyDB數據庫默認存儲的路徑。

 

8、導入基本Schema

 

[root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

[root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

[root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

[root@192 ~]# 

 

9、修改migrate_common.ph文件

migrate_common.ph文件主要是用於生成ldif文件使用,修改migrate_common.ph文件,

 修改下面三個值

$DEFAULT_MAIL_DOMAIN = “asiainfo.com”; #與上面配置的對應

$DEFAULT_BASE = “dc=asiainfo,dc=com”;  #與上面配置的對應

$EXTENDED_SCHEMA = 1;        #開啟擴展模式

到此OpenLDAP的配置就已經全部完畢,下面我們來開始添加用戶到OpenLDAP中。

 

10、默認情況下OpenLDAP是沒有普通用戶的,但是有一個管理員用戶。管理用戶就是前面我們剛剛配置的root。

現在我們把系統中的用戶,添加到OpenLDAP中。為了進行區分,我們現在新加兩個用戶ldapuser1和ldapuser2,和兩個用戶組ldapgroup1和ldapgroup2,如下:

groupadd ldapgroup1
groupadd ldapgroup2

useradd -g ldapgroup1 ldapuser1
useradd -g ldapgroup2 ldapuser2

echo ldapuser1:123 | chpasswd 
echo ldapuser2:123 | chpasswd 

把剛剛添加的用戶和用戶組提取出來,這包括該用戶的密碼和其他相關屬性

grep ":10[0-9][0-9]" /etc/passwd > /root/users   
grep ":10[0-9][0-9]" /etc/group > /root/groups

 

根據上述生成的用戶和用戶組屬性,使用migrate_passwd.pl文件生成要添加用戶和用戶組的ldif,如下:

[root@192 ~]# /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
[root@192 ~]# /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif

注意:后續如果要新加用戶到OpenLDAP中的話,我們可以直接修改users.ldif文件即可。

 

導入用戶及用戶組到OpenLDAP數據庫

配置openldap基礎的數據庫,如下:

vi base.ldif

dn: dc=asiainfo,dc=com
o: asiainfo com
dc: asiainfo
objectClass: top
objectClass: dcObject
objectclass: organization

dn: cn=root,dc=asiainfo,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manager

dn: ou=People,dc=asiainfo,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=asiainfo,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

 

 

導入基礎數據庫

[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/base.ldif
adding new entry "dc=asiainfo,dc=com"

adding new entry "cn=root,dc=asiainfo,dc=com"

adding new entry "ou=People,dc=asiainfo,dc=com"

adding new entry "ou=Group,dc=asiainfo,dc=com"

[root@192 ~]#

此密碼是之前創建的root管理員密碼,如果密碼錯誤,會報錯:

spacer.gif

[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/base.ldif
ldapadd: attributeDescription "dn": (possible missing newline after line 11, entry "dc=asiainfo,dc=com"?)
ldapadd: attributeDescription "dn": (possible missing newline after line 12, entry "dc=asiainfo,dc=com"?)
ldapadd: attributeDescription "dn": (possible missing newline after line 13, entry "dc=asiainfo,dc=com"?)
adding new entry "dc=asiainfo,dc=com"
ldap_add: Type or value exists (20)
        additional info: objectClass: value #0 provided more than once

[root@192 ~]# 

這是因為密碼錯誤 或者dn前沒有空一行,或者每行結尾有多余空格

 

 

將之前創建的倆個用戶導入到數據庫

[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/users.ldif
adding new entry "uid=ldapuser1,ou=People,dc=asiainfo,dc=com"

adding new entry "uid=ldapuser2,ou=People,dc=asiainfo,dc=com"

[root@192 ~]#

導入用戶組到數據庫

[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/groups.ldif
adding new entry "cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com"

adding new entry "cn=ldapgroup2,ou=Group,dc=asiainfo,dc=com"

[root@192 ~]#

 

 

驗證:

查看BerkeleyDB數據庫文件,使用如下命令:

[root@192 ~]# ll /var/lib/ldap/
total 492
-rwx------ 1 ldap ldap     2048 May  2 17:47 alock
-rw------- 1 ldap ldap     8192 May  2 18:28 cn.bdb
-rwx------ 1 ldap ldap   262144 May  2 18:32 __db.001
-rwx------ 1 ldap ldap    32768 May  2 18:32 __db.002
-rwx------ 1 ldap ldap    93592 May  2 18:32 __db.003
-rwx------ 1 ldap ldap      845 May  2 17:47 DB_CONFIG
-rwx------ 1 ldap ldap     8192 May  2 17:47 dn2id.bdb
-rwx------ 1 ldap ldap    32768 May  2 17:47 id2entry.bdb
-rwx------ 1 ldap ldap 10485760 May  2 18:32 log.0000000001
-rw------- 1 ldap ldap     8192 May  2 18:32 mail.bdb
-rw------- 1 ldap ldap     8192 May  2 18:28 objectClass.bdb
-rw------- 1 ldap ldap     8192 May  2 18:28 ou.bdb
-rw------- 1 ldap ldap     8192 May  2 18:32 sn.bdb
[root@192 ~]# 

 

此時BerkeleyDB數據庫文件中多了cn.bdb、sn.bdb、ou.bdb等數據庫文件

 

查詢OpenLDAP的相關信息

用戶和用戶組全部導入完畢后,我們就可以查詢OpenLDAP的相關信息。

查詢OpenLDAP全部信息,使用如下命令:

[root@192 ~]# ldapsearch -x -b "dc=asiainfo,dc=com" -H ldap://127.0.0.1       
# extended LDIF
#
# LDAPv3
# base <dc=asiainfo,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# asiainfo.com
dn: dc=asiainfo,dc=com
o: asiainfo com
dc: asiainfo
objectClass: top
objectClass: dcObject
objectClass: organization

# root, asiainfo.com
dn: cn=root,dc=asiainfo,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manager

 

查詢添加的OpenLDAP用戶信息,使用如下命令:

[root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "uid=ldapuser1"                     
dn: uid=ldapuser1,ou=People,dc=asiainfo,dc=com
uid: ldapuser1
cn: ldapuser1
sn: ldapuser1
mail: ldapuser1@asiainfo.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JENGRmZsL05kNDI4RUhYeSRoTFhsbHhRR1pOeTNVQXVNSDlzR2h
 mdC8ua3JjSjg3eU96Njg1SjBvWEEvT1EybWxDaERFZFo0QUdieC9HSXk2c3FnM1E3eVlxMnVoNzNj
 ckJISy82Lw==
shadowLastChange: 18384
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ldapuser1

[root@192 ~]# 

 

查詢添加的OpenLDAP用戶組信息,使用如下命令:

[root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "cn=ldapgroup1"                     
dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapgroup1
userPassword:: e2NyeXB0fXg=
gidNumber: 1000

[root@192 ~]# 

 

 

把OpenLDAP用戶加入到用戶組

盡管我們已經把用戶和用戶組信息,導入到OpenLDAP數據庫中了。但實際上目前OpenLDAP用戶和用戶組之間是沒有任何關聯的。

如果我們要把OpenLDAP數據庫中的用戶和用戶組關聯起來的話,我們還需要做另外單獨的配置。

現在我們要把ldapuser1用戶加入到ldapgroup1用戶組,需要新建添加用戶到用戶組的ldif文件,如下:

cat > add_user_to_groups.ldif <<  EOF

dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser1
EOF

然后執行

ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/add_user_to_groups.ldif

查詢添加的OpenLDAP用戶組信息,如下:

[root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "cn=ldapgroup1"                     
dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapgroup1
userPassword:: e2NyeXB0fXg=
gidNumber: 1000
memberUid: ldapuser1

[root@192 ~]# 

可以很明顯的看出ldapuser1用戶已經加入到ldapgroup1用戶組了。

開啟OpenLDAP日志訪問功能

默認情況下OpenLDAP是沒有啟用日志記錄功能的,但是在實際使用過程中,我們為了定位問題需要使用到OpenLDAP日志。

新建日志配置ldif文件,如下:

cat > /root/loglevel.ldif << EOF

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

EOF

導入到OpenLDAP中,並重啟OpenLDAP服務,如下:

[root@192 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"


[root@192 ~]# systemctl restart slapd
[root@192 ~]# 

 

修改rsyslog配置文件,並重啟rsyslog服務,如下:

cat >> /etc/rsyslog.conf << EOF

local4.* /var/log/slapd.log

EOF

systemctl restart rsyslog

 

查看OpenLDAP日志

tail -f /var/log/slapd.log

 

修改OpenLDAP默認監聽端口

OpenLDAP默認監聽的端口是389.如果我們現在要修改OpenLDAP監聽端口的話,我們可以修改/etc/sysconfig/slapd文件。例如我們現在把OpenLDAP監聽的端口修改為4567,可以進行如下操作:

vim /etc/sysconfig/slapd

SLAPD_URLS=”ldapi://0.0.0.0:4567/ldap://0.0.0.0:4567/”

重啟OpenLDAP服務,如下:

systemctl restart slapd.service

 

 

 

-x   進行簡單認證

-D   用來綁定服務器的DN

-h   目錄服務的地址

-w   綁定DN的密碼(ldap管理員密碼)

-f    使用ldif文件進行條目添加的文件

-Y    指定用於身份驗證的SASL機制。如果沒有指定,程序將選擇服務器知道的最佳機制

-H   指定引用ldap服務器的URI;只允許協議/主機/端口字段;一個用空格或逗號分隔的URI列表。

例子 

ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif 

ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret (這樣寫就是在命令行添加條目)

ldapsearch 

-x    進行簡單認證

-D   用來綁定服務器的DN

-w   綁定DN的密碼

-b   指定要查詢的根節點

-H   指定要查詢的服務器

-LLL  禁用打印無關信息

ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com" 

使用簡單認證,用 "cn=root,dc=starxing,dc=com" 進行綁定,

要查詢的根是 "dc=starxing,dc=com"。這樣會把綁定的用戶能訪問"dc=starxing,dc=com"下的

所有數據顯示出來。

ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn 

ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.0.92:636 

ldapdelete 

ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com" 

ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com' 

這樣就可以刪除'uid=zyx,dc=it,dc=com'記錄了,應該注意一點,如果o或ou中有成員是不能刪除的。

ldappasswd 

-x   進行簡單認證

-D   用來綁定服務器的DN

-w   綁定DN的密碼

-S   提示的輸入密碼

-s pass 把密碼設置為pass

-a pass 設置old passwd為pass

-A   提示的設置old passwd

-H   是指要綁定的服務器

-I   使用sasl會話方式

#ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S

New password:

Re-enter new password: 

就可以更改密碼了,如果原來記錄中沒有密碼,將會自動生成一個userPassword

 

創建ldap賬號

https://blog.51cto.com/ljl2013/1359441

 

 

Linux基於LDAP進行用戶認證

有三種方法:

一、使用authconfig-tui  圖形界面配置

二、使用authconfig啟動

1、准備工作

關閉防火牆

關閉selinux

2、安裝ldap客戶端

yum install -y nss-pam-ldapd pam_ldap openldap-clients

 

3、備份配置文件

#備份
authconfig --savebackup=openldap.bak

#恢復
authconfig --restorebackup=openldap.bak

4、authconfig啟動即可

authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update

如果執行上述命令沒效果,可以執行authconfig --restorebackup=openldap.bak恢復初始配置,再執行“authconfig 命令,操作如下:

[root@slave-02 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update
[root@slave-02 ~]# ps -ef | grep nslcd  #可以看到上面沒有啟動成功
root       2436   1912  0 21:57 pts/0    00:00:00 grep --color=auto nslcd
[root@slave-02 ~]# 
[root@slave-02 ~]# authconfig  --restorebackup=openldap.bak #恢復
[root@slave-02 ~]# 
[root@slave-02 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update
[root@slave-02 ~]# ps -ef | grep nslcd       #啟動成功了              
nslcd      2569      1  0 21:58 ?        00:00:00 /usr/sbin/nslcd
root       2579   1912  0 21:58 pts/0    00:00:00 grep --color=auto nslcd
[root@slave-02 ~]# 

 

 

 

三、主機配置(略復雜)

1-3 與authconfig一樣

4、配置 /etc/sysconfig/authconfig

/etc/sysconfig/authconfig 文件由 authconfig 包自動創建。 配置該文件的目的是用來跟蹤 LDAP 身份認證機制是否正確啟用。

[root@slave-02 ~]# cp /etc/sysconfig/authconfig /etc/sysconfig/authconfig.$(date +%F)
[root@slave-02 ~]# sed -i '/USESYSNETAUTH/s/no/yes/' /etc/sysconfig/authconfig
[root@slave-02 ~]# sed -i '/USELDAPAUTH/s/no/yes/' /etc/sysconfig/authconfig
[root@slave-02 ~]# sed -i '/USEMKHOMEDIR/s/no/yes/' /etc/sysconfig/authconfig
[root@slave-02 ~]# sed -i '/PASSWDALGORITHM/s/md5/yes/' /etc/sysconfig/authconfig
[root@slave-02 ~]# sed -i '/USELDAP/s/no/yes/' /etc/sysconfig/authconfig
[root@slave-02 ~]# cat /etc/sysconfig/authconfig | grep yes
CACHECREDENTIALS=yes
PASSWDALGORITHM=yes
USELDAP=yes
USELDAPAUTH=yes
USELOCAUTHORIZE=yes
USEMKHOMEDIR=yes
USEPWQUALITY=yes
USESHADOW=yes
USESSSD=yes
USESYSNETAUTH=yes
[root@slave-02 ~]# 

 

5、配置 /etc/nsswith.conf

/etc/nsswith.conf 文件由glibc包自動創建, 該文件用於名稱轉換服務。通常LINUX系統身份驗證讀取本地文件,要使身份驗證查詢通過LDAP服務器必須在該文件中找到passwd; shadow; group;三行在files后空格添加“ldap”

[root@slave-02 ~]# cp /etc/nsswitch.conf /etc/nsswitch.conf.$(date +%F)
[root@slave-02 ~]# sed -i '/^passwd:/s/files/files   ldap/' /etc/nsswitch.conf
[root@slave-02 ~]# sed -i '/^shadow:/s/files/files   ldap/' /etc/nsswitch.conf
[root@slave-02 ~]# sed -i '/^group:/s/files/files ldap/' /etc/nsswitch.conf
[root@slave
-02 ~]# sed -i '/^group:/s/files/files ldap/' /etc/nsswitch.conf
[root@slave
-02 ~]#
[root@slave
-02 ~]# egrep "^passwd|^shadow|^group" /etc/nsswitch.conf
passwd: files ldap sss
shadow: files ldap sss
group: files ldap sss
[root@slave
-02 ~]#

 

6、配置 /etc/pam.d/system-auth

 身份驗證服務是實際向LDAP驗證用戶身份的服務。可插入身份驗證模塊(PAM)提供了本地Linux身份驗證服務。pam_unix.so模塊是通用模塊,使用PAM機制對本地的/etc/passwd文件檢查用戶帳號。PAMLDAP模塊可以用來將身份驗證重定向到LDAP目錄上。身份驗證本身是由PAM程序執行的,它從身份驗證候選機制中獲取用戶名,將其綁定到openLDAP 服務器上。如果綁定成功,PAM會報告說這個用戶已經成功通過了pam_ldap.so提供的身份驗證測試。根據PAM的配置不同,在用戶看到命令提示符之前可能會執行其它測試。

    /etc/pam.d/system-auth文件是CentOS的系統認證PAM文件。在該文件的auth,account,password,session四段中pam_unix.so模塊后添加pam_ldap.so模塊使身份驗證先對本地的/etc/passwd文件檢查用戶帳號,然后再對LDAP服務器進行檢查。同時因為是LDAP認證需要為用戶創建根目錄,所以還必須在會話(SESSION)階段增加pam_mkhomedir.so模塊,為用戶登錄自動創建宿主目錄。

[root@slave-02 ~]# vi /etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so

 
         

account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so

 
         

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so

 
         

session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so

 

 

[root@slave-02 ~]#  vi /etc/pam.d/password-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so

 
         

account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so

 
         

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so

 
         

session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so

 

 

 

7、配置 /etc/openldap/ldap.conf

[root@slave-02 ~]# cp /etc/openldap/ldap.conf /etc/openldap/ldap.conf.$(date +%F)
[root@slave-02 ~]# echo "BASE dc=asiainfo,dc=com" >>/etc/openldap/ldap.conf
[root@slave-02 ~]# echo "URI ldap://192.168.7.6" >>/etc/openldap/ldap.conf
[root@slave-02 ~]#

 

8、使用 ldapsearch命令測試能否讀取 openldap server 中的數據

[root@slave-02 ~]# ldapsearch -x -b "dc=asiainfo,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=asiainfo,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# asiainfo.com
dn: dc=asiainfo,dc=com
o: asiainfo com
dc: asiainfo
objectClass: top
objectClass: dcObject
objectClass: organization

# root, asiainfo.com
dn: cn=root,dc=asiainfo,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manager

# People, asiainfo.com
dn: ou=People,dc=asiainfo,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

# Group, asiainfo.com
dn: ou=Group,dc=asiainfo,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

 

 

如果出現下面信息,解決該問題的方法是:

      1)檢查/etc/hosts文件,是否有ldapserver的記錄,最好能ping一下,看能否解析成功

      2)到openldap server上檢查slapd服務是否正在運行,如果沒有,啟動slapd服務

      3)檢查/etc/openldap/ldap.conf文件,查看里面的BASE和URI是否正確

[root@slave-02 ~]# ldapsearch -x -b "dc=asiainfo,dc=com"
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
[root@slave-02 ~]# 

 

9、啟動 nslcd

systemctl start nslcd

 

10、測試,可以看到雖然主機上沒有ldapuser1這個用戶,但啟動nslcd后,連接上ldap server,便可以使用這個賬號

[root@slave-02 ~]# id ldapuser1
id: ldapuser1: no such user
[root@slave-02 ~]# systemctl start nslcd
[root@slave-02 ~]# id ldapuser1         
uid=1000(any) gid=1000(any) groups=1000(any)
[root@slave-02 ~]# su - ldapuser1 
Creating directory '/home/ldapuser1'.
[any@slave-02 ~]$ 

 

 

 

https://blog.csdn.net/weixin_33713707/article/details/92177797

https://mp.weixin.qq.com/s/JyH5mqwWFt0N1nGYZqBCBQ

 


免責聲明!

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



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