2012/08/19

CENTOS 6 LDAP server設定 - 轉移使用者帳號資訊到 LDAP


目的:建立 LDAP server 並且將系統使用者帳號 /etc/passwd 及群組 /etc/group 匯入該 LDAP server。
1.先建立 LDAP server 的環境,再使用 migrationtools 轉換 /etc/passwd 及 /etc/group 成為 *.ldif 匯入 LDAP 系統內。
2/驗證無問題後再將 LDAP server 加上 TLS/SSL 加密傳輸的功能。
3.當以上建立完成後,由 LDAP Client 端驗證,並且經由 Client 主機執行使用這驗證經由 LDAP 驗證的機制。
4..測試完成後繼續進行 NFS 目錄分享自動掛載的功能設定,如此便可完成集中管理使用者帳號密碼的機制。



LDAP 環境設置

  • 建立 ldap 帳號於 /etc/passswd 內,待會要將這些帳號轉換入 ldap server 內:
mkdir /nishome
useradd -m -d /nishome/ldapuser1 ldapuser1
useradd -m -d /nishome/ldapuser2 ldapuser2
useradd -m -d /nishome/ldapuser3 ldapuser3
useradd -m -d /nishome/ldapuser4 ldapuser4
useradd -m -d /nishome/ldapuser5 ldapuser5
useradd -m -d /nishome/ldapuser6 ldapuser6
useradd -m -d /nishome/ldapuser7 ldapuser7
useradd -m -d /nishome/ldapuser8 ldapuser8
useradd -m -d /nishome/ldapuser9 ldapuser9
useradd -m -d /nishome/ldapuser10 ldapuser10
useradd -m -d /nishome/ldapuser11 ldapuser11
useradd -m -d /nishome/ldapuser12 ldapuser12
useradd -m -d /nishome/ldapuser13 ldapuser13
useradd -m -d /nishome/ldapuser14 ldapuser14
useradd -m -d /nishome/ldapuser15 ldapuser15
useradd -m -d /nishome/ldapuser16 ldapuser16
useradd -m -d /nishome/ldapuser17 ldapuser17
useradd -m -d /nishome/ldapuser18 ldapuser18
useradd -m -d /nishome/ldapuser19 ldapuser19
useradd -m -d /nishome/ldapuser20 ldapuser20
echo "ldapuser1:password" | chpasswd
echo "ldapuser2:password" | chpasswd
echo "ldapuser3:password" | chpasswd
echo "ldapuser4:password" | chpasswd
echo "ldapuser5:password" | chpasswd
echo "ldapuser6:password" | chpasswd
echo "ldapuser7:password" | chpasswd
echo "ldapuser8:password" | chpasswd
echo "ldapuser9:password" | chpasswd
echo "ldapuser10:password" | chpasswd
echo "ldapuser11:password" | chpasswd
echo "ldapuser12:password" | chpasswd
echo "ldapuser13:password" | chpasswd
echo "ldapuser14:password" | chpasswd
echo "ldapuser15:password" | chpasswd
echo "ldapuser16:password" | chpasswd
echo "ldapuser17:password" | chpasswd
echo "ldapuser18:password" | chpasswd
echo "ldapuser19:password" | chpasswd
echo "ldapuser20:password" | chpasswd

設定 LDAP server 不含 TLS/SSL 加密

  • 說明:
    1. 安裝 LDAP server 套件
  • 安裝ldap server 及 client 端工具
yum install openldap-devel openldap-servers openldap openldap-clients 
  • 產生加密後的密碼,等會需要設定再 slapd.conf 當成管理員加密的密碼
[root@localhost openldap]# slappasswd 
New password: 
Re-enter new password: 
{SSHA}leG4f9U9TEvcmZSwiYJ9FBcLidTS4fAv
  • 設定 ldap server , 系統預設沒有 slapd.conf 檔案,從系統 /usr/share/openldap-servers/ 預設值 copy 參照
[root@localhost openldap]# pwd
/etc/openldap
[root@localhost openldap]# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldapslapd.conf

# 編輯 slapd.conf , 請修改下列 dc=example 的部份,共有三個地方
[root@localhost openldap]# vim slapd.conf 
# enable server status monitoring (cn=monitor)
database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=Manager,dc=example,dc=com" read
        by * none

#######################################################################
# database definitions
#######################################################################

database        bdb
suffix          "dc=example,dc=com"
checkpoint      1024 15
rootdn          "cn=Manager,dc=example,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# rootpw                {crypt}ijFYNcSNctBYg
rootpw                  {SSHA}leG4f9U9TEvcmZSwiYJ9FBcLidTS4fAv

migrationtools

  • 這是由 PDAL Software Pty Ltd 所開發出來的 LDAP 工具,透過這個工具就能將本機帳號移轉到 LDAP 裡。如果是使用 RedHat 或是 CentOS 的話,安裝 openldap-servers 時就會將這些工具安裝在 /usr/share/openldap/migration 底下, 這套工具是從這裡http://www.padl.com/OSS/MigrationTools.html ,他的功能有底下幾種下面列出所有檔案與功能。
  • 安裝 migrationtools , 這是準備將 /etc/passwd 及 /etc/group 轉換為 ldif 的工具。可以用來第一次大量的匯入帳號、群組及相關資訊。
  • migrate_base.pl 用來產生 OU
  • migrate_passwd.pl 轉換 /etc/passwd
  • migrate_group.pl 轉換 /etc/group
[root@localhost ~]# yum install migrationtools
# migrationtools 程式放再 /usr/share/migrationtools/
[root@localhost openldap-servers]# cd /usr/share/migrationtools/
[root@localhost migrationtools]# pwd
/usr/share/migrationtools

# 修改一下設定值,將底下兩個地方改成 example 
[root@localhost migrationtools]# vim migrate_common.ph 
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "example.com";

# Default base 
$DEFAULT_BASE = "dc=example,dc=com";
  • migrationtools 工具 migrate_base.pl 產生的 ou 設定檔資訊,部分節錄如下:
[root@localhost ~]# /usr/share/migrationtools/migrate_base.pl 
# 只節錄部分有用到的部分
# LDAP 的根 --> 但是這個再這範例不適合使用
dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain

# /etc/passwd 的容器
dn: ou=People,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

# /etc/group 容器
dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
  • 轉換 /etc/passwd 及 /etc/group 為 ldif 等會要來匯入資料
/usr/share/migrationtools/migrate_passwd.pl /etc/passwd > /root/user.ldif
/usr/share/migrationtools/migrate_group.pl /etc/group > /root/group.ldif
  • 準備 LDAP 容器規劃檔案 ldif , 很重要連空隔及大小寫都要注意
# 給系統根路徑使用
[root@localhost ~]# vim example.ldif 
dn: dc=example,dc=com 
dc: example
objectClass: dcObject
objectClass: organization
o: example

# 給 /etc/group 使用,配合 /root/group.ldif
[root@localhost ~]# vim ou_group.ldif 
dn: ou=Group,dc=example,dc=com 
ou: Groups
objectClass: top
objectClass: organizationalUnit

# 給 /etc/passwd 使用,配合 /root/user.ldif
[root@localhost ~]# vim ou_people.ldif 
dn: ou=People,dc=example,dc=com 
objectclass: organizationalUnit
ou: People 

啟動 sldap server

  • 初始化 sldap server , 這幾行執行下去也會將所有的 LDAP DB 刪除, 如果做錯需要重來也只要從這一段把ldap 的 DB 及設定刪除重新開始就可以。
# 關閉 ldap server
/etc/init.d/slapd stop
# 刪除 ldap 的 DB 檔案,他是用檔案型 DB 當資料庫做存取的.
rm -rf /var/lib/ldap/*
# 刪除 ldap 設定黨
rm /etc/openldap/slapd.d/* -rf
# 再 /var/lib/ldap 的設定檔需要 DB_CONFIG 的檔案,否則會產生錯誤
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# 測試 slapd.conf 並且產生 ldap server 設定檔
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
# 改變目錄的權限為 ldap 
chown -R ldap.ldap /var/lib/ldap/ 
chown -R ldap:ldap /etc/openldap/slapd.d
# 啟動 ldap server
/etc/init.d/slapd start
  • clean
/etc/init.d/slapd stop
rm -rf /var/lib/ldap/*
rm /etc/openldap/slapd.d/* -rf
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap.ldap /var/lib/ldap/ 
chown -R ldap:ldap /etc/openldap/slapd.d
/etc/init.d/slapd start
  • 驗證 ldap tcp 389 及 slapd 程式正確執行
[root@localhost ~]# netstat -anp | grep slapd
tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      4842/slapd          
tcp        0      0 :::389                      :::*                        LISTEN      4842/slapd          
unix  2      [ ACC ]     STREAM     LISTENING     43581  4842/slapd          /var/run/ldapi
unix  2      [ ]         DGRAM                    43575  4842/slapd          
  • 預設開機啟動 slapd
[root@localhost ~]# chkconfig slapd on

使用 ldapadd 匯入容器的 ou 設定

  • 使用 ldapadd 匯入資料 , 另一種方式是使用 slapadd 匯入資料,但是這種方式需要再服務關閉的時候執行.
# 匯入 example.ldif 的容器設定檔
# man ldapadd
# -D 需要設定的 ldap binddn 
# -x 使用 SASL 認證
# -W 提示認證
# -f 讀取修改的輸入檔案
[root@localhost ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif 
Enter LDAP Password: 剛剛設定在 slapd.conf 的密碼
adding new entry "dc=example,dc=com "
  • 接下來匯入其他兩個 ou_group.ldif 及 ou_people.ldif , 如果沒有錯誤訊息那應該就是對的。
  • 先匯入 ou_people.ldif 的容器格式,再匯入 user.ldif
[root@localhost ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ou_people.ldif 
Enter LDAP Password: 
adding new entry "ou=People,dc=example,dc=com "
  • 先匯入 ou_group.ldif 再匯入
[root@localhost ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ou_group.ldif 
Enter LDAP Password: 
adding new entry "ou=Group,dc=example,dc=com "
  • 驗證是否已經匯入成功,第一次成功是好的開始
[root@localhost ~]# ldapsearch -x -b "dc=example,dc=com"
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

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

# People, example.com
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou:: UGVvcGxlIA==

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

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3

匯入資料 group.ldif 及 user.ldif

  • 匯入 group.ldif
[root@localhost ~]# cat group.ldif 
dn: cn=root,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: root
userPassword: {crypt}x
gidNumber: 0

... 礙於篇幅只擷取第一筆資料及最後一筆資料,其他予以省略 ...

dn: cn=ldapuser20,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser20
userPassword: {crypt}x
gidNumber: 521

[root@localhost ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f group.ldif 
Enter LDAP Password: 
adding new entry "cn=root,ou=Group,dc=example,dc=com"

... 礙於篇幅只擷取第一筆資料及最後一筆資料,其他予以省略 ...

adding new entry "cn=ldapuser20,ou=Group,dc=example,dc=com"
  • 匯入資料 user.ldif
[root@localhost ~]# cat user.ldif 
dn: uid=root,ou=People,dc=example,dc=com
uid: root
cn: root
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$ceMIGLrh$VclS.GQzI.kDCAXm1s2uW0eZnEUdcbbzzPvoUHn5mtHgLvaOVYw11mUzIKycBU/8rKHfW9aiY6krC7XG1at5T.
shadowLastChange: 15570
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root

... 礙於篇幅只擷取第一筆資料及最後一筆資料,其他予以省略 ...

dn: uid=ldapuser20,ou=People,dc=example,dc=com
uid: ldapuser20
cn: ldapuser20
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}!!
shadowLastChange: 15570
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 521
gidNumber: 521
homeDirectory: /nishome/ldapuser20

[root@localhost ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user.ldif 
Enter LDAP Password: 
adding new entry "uid=root,ou=People,dc=example,dc=com"

... 礙於篇幅只擷取第一筆資料及最後一筆資料,其他予以省略 ...

adding new entry "uid=ldapuser20,ou=People,dc=example,dc=com"

設定 LDAP server 包含 TLS/SSL 加密

  • 上面的 LDAP server 如果已經建立成功,要改變成為 TLS/SSL 的加密傳輸,只需要稍作改變即可變更。

TLS/SSL加密設定

  • 建立 TLS/SSL 憑證
[root@localhost ~]# cd /etc/pki/tls/certs
# 刪除原本的憑證
[root@localhost certs]# rm slapd.pem
[root@localhost certs]# pwd
/etc/pki/tls/certs

# 有 Makefile 內有製作 slapd.pem 憑證的方法
[root@localhost certs]# ls -l
總計 1204
-rw-r--r--. 1 root root 571450 2010-04-07 23:42 ca-bundle.crt
-rw-r--r--. 1 root root 651083 2010-04-07 23:42 ca-bundle.trust.crt
-rwxr-xr-x. 1 root root    610 2012-05-30 01:20 make-dummy-cert
-rw-r--r--. 1 root root   2242 2012-05-30 01:20 Makefile

# 產生 slapd.pem 憑證
[root@localhost certs]# make slapd.pem
umask 77 ; \
 PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
 PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
 /usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
 cat $PEM1 >  slapd.pem ; \
 echo ""    >> slapd.pem ; \
 cat $PEM2 >> slapd.pem ; \
 rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
...+++
....................................+++
writing new private key to '/tmp/openssl.rWAX9H'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:TW
State or Province Name (full name) []:taiwan
Locality Name (eg, city) [Default City]:kaohsiung
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:mtchang.tw@gmail.com
  • 改變憑證的權限
[root@localhost certs]# chmod 640 slapd.pem 
[root@localhost certs]# chown ldap:ldap slapd.pem 
# 將這憑證訪到 /etc/openldap/cacerts 目錄下提供憑證認證使用
[root@localhost certs]# ln -s /etc/pki/tls/certs/slapd.pem /etc/openldap/cacerts/slapd.pem
  • 修改系統的啟動設定檔,開啟 LDAPS 的功能
[root@localhost cacerts]# vim /etc/sysconfig/ldap 
# Run slapd with -h "... ldaps:/// ..."
#   yes/no, default: no
SLAPD_LDAPS=yes
  • 修改 slapd.con 的設定檔,加入憑證路徑
[root@localhost ~]# vim /etc/openldap/slapd.conf 
# 把原本的底下三行註解掉
# TLSCACertificatePath /etc/openldap/certs
# TLSCertificateFile "\"OpenLDAP Server\""
# TLSCertificateKeyFile /etc/openldap/certs/password
# 加入底下三行
TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
# 因為 slapd.pem 存放有兩把 key 所以指到同一個檔案即可
TLSCertificateFile /etc/pki/tls/certs/slapd.pem
TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem
  • 重新啟動 slapd ,因為有動到 slapd.conf 設定檔所需要刪除原本的設定檔案再重新啟動
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d
service slapd restart
  • 驗證 slapd tcp port 636 port
[root@localhost ~]# netstat -anp | grep slapd
tcp        0      0 0.0.0.0:636                 0.0.0.0:*                   LISTEN      6481/slapd          
tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      6481/slapd          
tcp        0      0 :::636                      :::*                        LISTEN      6481/slapd          
tcp        0      0 :::389                      :::*                        LISTEN      6481/slapd          
unix  2      [ ACC ]     STREAM     LISTENING     52009  6481/slapd          /var/run/ldapi
unix  2      [ ]         DGRAM                    51999  6481/slapd      

建立公開的 CA 憑證提供下載

  • 如要提供給認證設定前需要在 LDAP server 建立一個可以下載的憑證提供 LDAP client 端讀取
# 請複製憑證到網頁根目錄,以方便提供使用
[root@localhost ~]# cp /etc/pki/tls/certs/slapd.pem /var/www/html/ldap_ca.pem
[root@localhost ~]# chmod 755 /var/www/html/ldap_ca.pem
# 請將憑證處理到只剩下 
# -----BEGIN CERTIFICATE-----
# -----END CERTIFICATE-----
# 這個區段內的內容,其於的請刪除
[root@localhost ~]# cat /var/www/html/ldap_ca.pem 
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIBADANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJUVzEP
MA0GA1UECAwGdGFpd2FuMRIwEAYDVQQHDAlrYW9oc2l1bmcxHDAaBgNVBAoME0Rl
ZmF1bHQgQ29tcGFueSBMdGQxIzAhBgkqhkiG9w0BCQEWFG10Y2hhbmcudHdAZ21h
aWwuY29tMB4XDTEyMDgxODE0NDUyMFoXDTEzMDgxODE0NDUyMFowdTELMAkGA1UE
BhMCVFcxDzANBgNVBAgMBnRhaXdhbjESMBAGA1UEBwwJa2FvaHNpdW5nMRwwGgYD
VQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMSMwIQYJKoZIhvcNAQkBFhRtdGNoYW5n
LnR3QGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMvO
7gOYSXhTNWtCsHsYLtNVQCLOs5JTSJDSfzeUMjHw1iFKwsmlxiLYUeDsZRU9YGBL
tmh4vjk45JOpNSthMXXkkqhj8BmXQUihoeu6LBJZr39WVG8BJgKFKPhGEmc08Zj3
N7z30/Cb1rrDyQcHWPJRhwAzSL1SJcHHMPSqKFPbQ30NuNGktwXTHzxFYu8mkwFr
xVWItAavX5UxfdzeVWxql79LEpaY5esJxF3iKPNmHmnO4gxrq3UTMynyr98Ckw+x
2eJhF6Gc7Ar5p472djGh/WI3/l1qWNs8vl+5aKZbhmY3OgKbO3ABnJ5ceagYEFbT
B1katWJau4iWz7mKNSsCAwEAAaNQME4wHQYDVR0OBBYEFCiDTDjbKlkoXqyXXUdK
2pkIwka6MB8GA1UdIwQYMBaAFCiDTDjbKlkoXqyXXUdK2pkIwka6MAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAIVHt7HpnzzXiLbf3LZUI3fR32q5vhv1
1lGgZj0XkRbEqrRdPuVKCXbYQ8FlOIgca2/I+NGd+k7gIec/IZBWVJPA/Sk30oej
8KamZ2rxWJM+0U+2UoEYOzPE00uWiBkXSNaoZcq5YzLhCUX8FI6p62omcazgpVap
keiJ9H85c1mExggffaHBudG3j92bzkDtuyHs32gK0skZGwaAHZKDcw2fIDsWr7CM
kz2mCgEcSPSZEl3R5pbL+kH/xhbpmF0zE4KX93GGB+xvQolKZ2IclXvfsGGdh+g5
iKymVaVxGpJqZG5l0thjWlXFK3X5B2gceXBYFd7LGSk7qtWiz5C9PNA=
-----END CERTIFICATE-----

LDAP 客戶端本機驗證

  • 修改 ldap.conf (ldap client) 加入憑證的搜尋路徑
[root@localhost ~]# vim /etc/openldap/ldap.conf
URI ldap://127.0.0.1
BASE dc=example,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
TLS_REQCERT never
  • ldapsearch -x 使用SASL認證 -ZZ 參數是使用 StartTLS 擴充功能操作
[root@localhost ~]# ldapsearch -x -ZZ -h localhost
.... 略過部分資料,只擷取最後一段 ....
# ldapuser20, People, example.com
dn: uid=ldapuser20,ou=People,dc=example,dc=com
uid: ldapuser20
cn: ldapuser20
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSEh
shadowLastChange: 15570
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 521
gidNumber: 521
homeDirectory: /nishome/ldapuser20

# search result
search: 3
result: 0 Success

# numResponses: 141
# numEntries: 140
  • ldapsearch -x 使用SASL認證 -H 是使用 URI(s) 的方式指定 ldap 資源(SSL)
[root@localhost ~]# ldapsearch -x -H ldaps://localhost
.... 略過部分資料,只擷取最後一段 ....
# ldapuser20, People, example.com
dn: uid=ldapuser20,ou=People,dc=example,dc=com
uid: ldapuser20
cn: ldapuser20
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSEh
shadowLastChange: 15570
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 521
gidNumber: 521
homeDirectory: /nishome/ldapuser20

# search result
search: 2
result: 0 Success

# numResponses: 141
# numEntries: 140

其他主機設定 LDAP 帳號認證

  • 客戶端使用這 LDAP TLS 驗證設定
    1. 使用者資料庫型態:LDAP
    2. Server CA憑證路徑在 http://192.168.123.171/ldap_ca.pem
    3. LDAP Base DN: dv=example,dc=com
    4. LDAPS://192.168.123.171
    5. 認證方式:LDAP 密碼認證
  • 建立client 的 user 認證設定,啟動認證設定圖型介面程式
$ system-config-authentication
  • 設定的畫面
Ldap tls auth.jpg
  • 輸入 CA 憑證網址,建立後會自動下載為 /etc/openldap/cacerts/ 內的一個檔案
Ldap tls auth URI.jpg

  • getent 驗證是否可以查詢到資料
[mtchang@localhost ~]$ getent passwd ldapuser1
ldapuser1:*:502:502:ldapuser1:/nishome/ldapuser1:/bin/bash
[mtchang@localhost ~]$ getent passwd ldapuser20
ldapuser20:*:521:521:ldapuser20:/nishome/ldapuser20:/bin/bash
[mtchang@localhost ~]$ getent passwd ldapuser10
ldapuser10:*:511:511:ldapuser10:/nishome/ldapuser10:/bin/bash

設定 Server 端提供 NFS 功能

  • NIS Server 端的 nfs server 設定
[root@server1 ~]# vim /etc/exports
/nishome        192.168.0.0/16(rw,sync)
  • nfs啟動及測試
[root@server1 ~]# service nfslock restart
[root@server1 ~]# service nfs restart
  • 驗證本機的 nfs 資源已分享
[root@localhost /]# showmount -e localhost Export list for localhost: /nishome 192.168.0.0/16
  • 在 server 端已經有提供建立好的目錄
[root@localhost /]# ls /nishome/
ldapuser1   ldapuser12  ldapuser15  ldapuser18  ldapuser20  ldapuser5  ldapuser8
ldapuser10  ldapuser13  ldapuser16  ldapuser19  ldapuser3   ldapuser6  ldapuser9
ldapuser11  ldapuser14  ldapuser17  ldapuser2   ldapuser4   ldapuser7

設定 Client 端提供有 AUTOFS 自動掛載功能

  • 使用 ssh 從第三方主機登入已經設定好使用者認證的 LDAP CLIENT 主機,會有找不到 home 目錄的問題
[root@localhost ~]# ssh ldapuser10@192.168.123.141:22
Could not chdir to home directory /nishome/ldapuser10: No such file or directory
/usr/bin/xauth:  error in locking authority file /nishome/ldapuser10/.Xauthority
-bash-4.1$ 
  • 從遠端得到 nfs home 目錄
[root@localhost ~]# showmount -e 192.168.123.171
Export list for 192.168.123.171:
/nishome 192.168.0.0/16
  • 設定 /etc/auto.master
[root@localhost ~]# vim /etc/auto.master
/nishome        /etc/auto.nishome
  • 設定 /etc/auto.nishome
[root@localhost ~]# vim /etc/auto.nishome
*          -rw,soft,intr           192.168.123.171:/nishome/&
  • 重新載入 autofs 注意需要先 stop 在 start 否則會有問題,不能使用 restart
[root@localhost ~]# service autofs stop
正在停止 automount:                                       [  確定  ]
[root@localhost ~]# service autofs start
正在啟動 automount:                                       [  確定  ]
  • 預設開機啟動
[root@localhost ~]# chkconfig autofs on
  • 再次使用 ssh 從第三方主機登入已經設定好使用者認證的 LDAP CLIENT 主機,這次發現登入後就自動掛載目錄了。
[root@localhost ~]# ssh ldapuser10@192.168.123.141:22
Last login: Sun Aug 19 01:26:59 2012 from 192.168.123.191
[ldapuser10@localhost ~]$ mount
/dev/mapper/vgsrv-root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vgsrv-home on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.123.171:/nishome/ldapuser10 on /nishome/ldapuser10 type nfs (rw,soft,intr,sloppy,vers=4,addr=192.168.123.171,clientaddr=192.168.123.141)
[ldapuser10@localhost ~]$ 

3 則留言:

匿名 提到...

您好:
拜讀大作之後,在啟動ldap server時
輸入:slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
得到:invalid config Directory
/etc/openldap/slapd.d error2
slaptest:bad configuration directory 我有按照您的步驟下去作,不知那裡有問題,可否告知,謝謝!

mtchang 提到...

這錯誤訊息不夠多,不好除錯。我猜應該是該程式還沒安裝吧!

hao 提到...

這篇對我用處很大 謝謝

有一個小疑問
# 給 /etc/group 使用,配合 /root/group.ldif
[root@localhost ~]# vim ou_group.ldif
dn: ou=Group,dc=example,dc=com
ou: Groups
objectClass: top
objectClass: organizationalUnit


ou: Groups應該是ou: Group?