配置Linux使用LDAP用戶認(rèn)證的方法
我這里使用的是CentOS完成的LDAP用戶管理,可能與網(wǎng)上的大部分教程不同,不過寫出來了,那么是肯定能用的了,不過會有部分文件,忘指教。
這里使用的 OPENLdap 配合 CentOS7 完成的用戶管理,需要配置 nssswitch 、pam 和 sssd 3個(gè)服務(wù),需要先有一定的了解才能完成本文的配置。
基礎(chǔ)配置#
1.完成yum源的配置
mkdir /root/back tar -Jcvf /root/back/yum.repos.d-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/yum.repos.d/ rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum,repos.d/CentOS-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache
1.安裝必要軟件
yum -y install vim bash-completion openldap-servers openldap-clients nss-pam-ldapd sssd
OPENLdap服務(wù)部分配置#
初始化過程就不再過多贅述,詳細(xì)查詢《OPENLDAP 服務(wù)搭建和后期管理》。
1.首先停止數(shù)據(jù)庫服務(wù):
systemctl stop slapd
1.然后編輯文件:
# 首先備份文件,以免無法復(fù)原 mkdir /root/back tar -Jcvf /root/back/slapd.config-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/openldap/slapd.d/ tar -Jcvf /root/back/slapd.data-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap/ # 然后再刪除配置文件 rm -rf /etc/openldap/slapd.d/* rm -rf /var/lib/ldap/* # 復(fù)制配置文件到臨時(shí)目錄 mkdir /root/ldap cd /root/ldap
1.編寫slapd的配置文件。這里的配置文件是從 /usr/share/openldap-servers/slapd.ldif 中演變而來的,主要修改了baseDN(suffix), OPENLDAPTLS,olcRootPW(密碼由 slappasswd 生成,本文中的密碼為: 123456) 和 include。
# file: /root/ldap/slapd.ldif dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/openldap/slapd.args olcPidFile: /var/run/openldap/slapd.pid olcTLSCertificateFile: /etc/openldap/certs/server.crt olcTLSCertificateKeyFile: /etc/openldap/certs/server.key olcTLSCACertificateFile: /etc/openldap/cacerts/cacert.pem dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema include: file:///etc/openldap/schema/core.ldif include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/nis.ldif include: file:///etc/openldap/schema/inetorgperson.ldif dn: olcDatabase=frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: frontend dn: olcDatabase=config,cn=config objectClass: olcDatabaseConfig olcDatabase: config olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none dn: olcDatabase=monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: monitor olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=black,dc=com" read by * none dn: olcDatabase=hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: hdb olcSuffix: dc=black,dc=com olcRootDN: cn=Manager,dc=black,dc=com olcRootPW: {SSHA}l1vBI/HOMKLEiQZgcm3Co+hFQI68rH1Q olcDbDirectory: /var/lib/ldap olcDbIndex: objectClass eq,pres olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
1.配置OPENSSL的證書。為openldap服務(wù)器的加密隧道使用。
# 首先是創(chuàng)建CA服務(wù)的證書文件 cd /etc/pki/CA openssl genrsa -out private/cakey.pem 2048 openssl req -new -x509 -key private/cakey.pem -out cacert.pem # 這里的證書創(chuàng)建過程就省略不寫了。 # 不過需要注意的是,必須要保證后面服務(wù)器證書申請的開頭部分必須與證書開頭相同,否則無法通過CA簽發(fā)證書。 touch index.txt echo "01" > serial # 然后申請簽發(fā)服務(wù)器證書 cd /etc/openldap/certs/ openssl genrsa -out server.key 2048 openssl ca -in server.csr -out server.crt -days 365 # 復(fù)制CA證書到指定位置 mkdir /etc/openldap/cacerts cp /etc/pki/CA/cacert.pem /etc/openldap/cacerts/
1.根據(jù)配置生成服務(wù)器的配置文件
slapadd -F "/etc/openldap/slapd.d/" -b "cn=config" -l slapd.ldif # 這里還需要注意文件屬主還是root的,需要改回為openldap chown -R ldap:ldap /etc/openldap/slapd.d/* # 然后再開啟服務(wù)即可 systemctl start slapd _#################### 100.00% eta none elapsed none fast! Closing DB... 1.初始化數(shù)據(jù)庫 dn: dc=black,dc=com dc: black objectClass: top objectClass: domain dn: cn=Manager,dc=black,dc=com objectClass: organizationalRole cn: Manager description: LDAP Manager dn: ou=People,dc=black,dc=com ou: People objectClass: top objectClass: organizationalUnit objectClass: domainRelatedObject associatedDomain: black.com dn: ou=Group,dc=black,dc=com ou: Group objectClass: top objectClass: organizationalUnit objectClass: domainRelatedObject associatedDomain: black.com
1.導(dǎo)入至數(shù)據(jù)庫
ldapadd -x -D "cn=Manager,dc=black,dc=com" -w 123456 -f base.ldif # 將基礎(chǔ)信息導(dǎo)入數(shù)據(jù)庫。 adding new entry "dc=black,dc=com" adding new entry "cn=root,dc=black,dc=com" adding new entry "ou=People,dc=black,dc=com" adding new entry "ou=Group,dc=black,dc=com"
1.那么再使用apache directory studio來查看 服務(wù)器是否配置成功。
首先先將防火墻開啟
firewall-cmd --add-service=ldap
1.我們這里先導(dǎo)入一個(gè)用戶用于后面的測試使用
Linux 用戶認(rèn)證部分配置#
我這里設(shè)計(jì)的用戶認(rèn)證和解析是這樣完成的:
與網(wǎng)上其他人寫的會有所不同,需要注意。
NSS服務(wù)配置#
如果想使 nss 可以查詢ldap,那么首先就需要啟用一個(gè)叫 nslcd 的服務(wù), 以下是該服務(wù)的配置文件。
# file: /etc/nslcd.conf uid nslcd gid ldap uri ldap://127.0.0.1/ base dc=black,dc=com binddn cn=Manager,dc=black,dc=com bindpw 123456 ssl no tls_cacertdir /etc/openldap/cacerts
啟動服務(wù)
chmod 600 /etc/nslcd.conf systemctl start nslcd systemctl enable nslcd
配置nss
# file: /etc/nsswitch.conf passwd: files ldap # 主要就是 passwd、shadow 和 group 這3行需要后面添加ldap shadow: files ldap group: files ldap hosts: files dns myhostname bootparams: nisplus [NOTFOUND=return] files ethers: files netmasks: files networks: files protocols: files rpc: files services: files sss netgroup: nisplus sss publickey: nisplus automount: files nisplus sss aliases: files nisplus
測試是否可用:
getent passwd | grep black black:x:1001:1001:black:/home/black:/bin/bash
PAM服務(wù)配置#
pam模塊已經(jīng)有通過SSSD認(rèn)證的相關(guān)模塊配置了,我們這里引用以下即可。
cd /etc/pam.d/ mv system-auth{,.bak} ln -s system-auth-ac system-auth
PAM不用進(jìn)行服務(wù)重啟,直接可以使用
sssd服務(wù)配置#
針對LDAP用戶登入,PAM配置會將其轉(zhuǎn)發(fā)給SSSD,由SSSD來認(rèn)證用戶。下面就是sssd.conf 的配置文件了:
# file: /etc/sssd/sssd.conf [domain/black.com] autofs_provider = ldap # 配置 autofs 的提供程序?yàn)?ldap id_provider = ldap # id 的提供程序?yàn)?ldap auth_provider = ldap # 配置 auth 認(rèn)證的提供程序?yàn)?ldap chpass_provider = ldap # 更改密碼 操作時(shí)的對用應(yīng)用 cache_credentials = True # 開啟緩存 ldap_search_base = dc=black,dc=com # ldap 查詢的base dn ldap_uri = ldap://127.0.0.1/ # ldap 的 URL 路徑 ldap_id_use_start_tls = True # 開啟 ldap 的 tls 加密。 ldap_tls_reqcert = never # 不強(qiáng)制要求 tls 加密(這里可以設(shè)置為 hard 強(qiáng)制 TLS 加密,如果 tls 無法使用則可能導(dǎo)致服務(wù)失??; 由于ldap 與 sssd在同一臺,所以不需要 tls 加密) ldap_tls_cacertdir = /etc/openldap/cacerts # ldap 服務(wù) tls 加密信任證書(CA根證書)。 [sssd] services = nss, pam, autofs # 提供的服務(wù) domains = black.com # 設(shè)置啟用的域 [nss] homedir_substring = /home [pam] [sudo] [autofs] [ssh] [pac] [ifp] [secrets] [session_recording]
配置啟動服務(wù),并且設(shè)置開機(jī)自啟動。
chmod 600 /etc/sssd/sssd.conf # 注意權(quán)限的配置,否則無法啟動。 systemctl start sssd systmctl enable sssd
測試#
那么這樣用戶認(rèn)證的部分就制作好了,那么現(xiàn)在來測試一下:
因?yàn)榕渲玫?system-auth 文件,并沒有配置 ssh 文件,所以ssh是連接不進(jìn)去的。這里使用login來測試可行性。
這里我們也能看到,用戶時(shí)能登入了的,還有一個(gè)瑕疵就是提示沒有家目錄下面通過腳本來解決。
腳本#
我為這個(gè)LDAP用戶認(rèn)證寫了一個(gè)腳本,方便添加用戶。我這里還是要強(qiáng)調(diào)一下,CentOS雖然有提供 migrationtools 工具用于將用戶存放至LDAP數(shù)據(jù)庫,但是如果你把本地用戶全都提到 LDAP 數(shù)據(jù)庫,不保留本地用戶,那么你就會發(fā)現(xiàn),電腦就會無法重啟了,所以推薦不要把UID小于1000的用戶存放到 LDAP 服務(wù)器。
注:該腳本必須在搭建好上述環(huán)境后才可使用,其余環(huán)境可能有未知問題。
腳本放在gitee上了。https://gitee.com/somata/script/blob/master/ldap_adduser.sh
使用方法很簡單
然后再測試一下這個(gè)添加的用戶是否可以登入:
總結(jié)
以上所述是小編給大家介紹的配置Linux使用LDAP用戶認(rèn)證,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時(shí)回復(fù)大家的!
相關(guān)文章
systemd添加自定義系統(tǒng)服務(wù)設(shè)置自定義開機(jī)啟動的方法
下面小編就為大家?guī)硪黄猻ystemd添加自定義系統(tǒng)服務(wù)設(shè)置自定義開機(jī)啟動的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12Linux定時(shí)任務(wù)Crontab的使用方法
這篇文章主要為大家詳細(xì)介紹了Linux定時(shí)任務(wù)Crontab的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12關(guān)于linux權(quán)限s權(quán)限和t權(quán)限詳解
本文介紹了linux系統(tǒng)內(nèi)的2個(gè)特殊權(quán)限s權(quán)限和t權(quán)限,簡單易懂,大家可以詳細(xì)看看2018-03-03Linux學(xué)習(xí)教程之redis哨兵集群詳解
這篇文章主要給大家介紹了關(guān)于Linux學(xué)習(xí)教程之Redis哨兵集群的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Linux強(qiáng)制釋放占用端口以及Linux防火墻端口開放方法詳解
在linux系統(tǒng)中安裝一些軟件時(shí)有時(shí)遇到端口被占用的情況,本文為大家介紹了遇到這種情況我們應(yīng)該怎么處理2018-10-10