站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

OpenLDAP-PAM NSS 設定

前言

實作環境

安裝及設定

步驟1.安裝所需套件

切換至 Ports Tree 路徑安裝 nss_ldap、pam_ldap、pam_mkhomedir 套件

  1. nss_ldap:用來 取得使用者帳號、群組....等資訊
  2. pam_ldap:用來 認證使用者 的機制以及服務授權
  3. pam_mkhomedir:用來 當登入時自動建立使用者家目錄
 #cd /usr/ports/net/nss_ldap/            //切換到安裝路徑
 #make install clean                     //安裝套件並清除安裝過程中產生不必要檔案           
 #cd /usr/ports/security/pam_ldap        //切換到安裝路徑
 #make install clean                     //安裝套件並清除安裝過程中產生不必要檔案
 #cd /usr/ports/security/pam_mkhomedir   //切換到安裝路徑
 #make install clean                     //安裝套件並清除安裝過程中產生不必要檔案           

步驟2.修改 PAM 設定檔 (lapd.conf)

修改 LDAP 設定檔 ldap.conf

 #cp /usr/local/etc/ldap.conf.dist ldap.conf  //複製範例檔來修改
 host 127.0.0.1                               //指定 pam/nss 去哪裡找 LDAP Server
 uri ldap://ldap.weithenn.org                 //指定 pam/nss 去哪裡找 LDAP Server
 base dc=weithenn,dc=org                      //定義搜尋的尾碼
 rootbinddn cn=root,dc=weithenn,dc=org        //指定 rootdn
 pam_filter objectclass=posixAccount          //使用 posixAccount物件來比較 login name
 pam_login_attribute uid                      //使用 DN 記錄內 uid 來比對 login name
 bind_policy soft                             //否則重新啟動將會卡住很久

步驟3.修改 NSS 設定檔 (nss_lapd.conf)

因為 pam_ldap/nss_ldap 設定檔內容一模一樣,所以我們只要修改好 PAM 設定檔後,利用 Symbol Link 的方式將 NSS 設定檔 (nss_ldap.conf) 連結至 PAM 設定檔 (ldap.conf)即可,當然若有需要用 pam/nss 一些進階參數也很好判別,分別都是各模組開頭 (ex.pam_min_uid....,nss_base_passwd.....)

 #cd /usr/local/etc
 #ln -s ldap.conf nss_ldap.conf               //建立 Symbol Link 連結 PAM 及 NSS 設定檔

建立 nss_ldap.secret 填入 LDAP 管理者密碼 (此檔密碼為明碼,因此建議檔案權限設為 chmod 400)

 #vi nss_ldap.secret                          //填入管理密碼
 #chmod 400 nss_ldap.secret                   //因為此檔檔內容為明碼 

步驟4.修改 nsswitch.conf

因為會使用到 nss_ldap 模組的服務,因此請修改此設定檔

 #vi /etc/nsswitch.conf                       //修改設定檔內容如下
 group: compat
 group_compat: ldap nis                       //加上 ldap 認證選項
 hosts: files dns
 networks: files
 passwd: compat
 passwd_compat: ldap nis                      //加上 ldap 認證選項
 shells: files

步驟5.修改 /etc/master.passwd 以及 /etc/group

修改系統使用者密碼及群組檔案,將認證部份導至 LDAP

 #vipw                     //修改使用者密碼檔案 (/etc/master.passwd)
 +:*::::::::               //加入此行 (允許任何人登入)
 #vi /etc/group            //修改群組檔 (/etc/group)
 +:*::                     //加入此行

步驟6.測試使用者認證功能

相關設定修改完成後我們使用指令 id 及 finger 來測試系統是不是已經可以透過 LDAP 來進行使用者認證 (LDAP Account)

 #id test                                 //看是否能認證剛才建立的 test 帳號
 uid=18000(test) gid=18000 groups=18000   //認證成功
 #finger test                             //看是否能認證剛才建立 test 的 LDAP 相關資訊
 Login: test                             Name: test user
 Directory: /home/user/test              Shell: /bin/tcsh
 No Mail.
 No Plan.
 #id weithenn                             //確保本機的帳號也是可以識別的 (當 LDAP 爛了還能利用本機帳號登入)
 uid=1001(weithenn) gid=1001(weithenn) groups=1001(weithenn)
 #touch testfile ; chown 18000 testfile   //建立測試檔案並指定擁有者為 uid 18000
 #ls -l                                   //系統可辨認 uid 18000 為使用者名稱 test
 -rw-r--r--  1 test    wheel         0  7 18 15:54 testfile
 Jul 20 17:44:00 ldap slapd[61655]: conn=0 fd=11 ACCEPT from IP=127.0.0.1:57562 (IP=0.0.0.0:389)
 Jul 20 17:44:00 ldap slapd[61655]: conn=0 op=0 BIND dn="cn=root,dc=weithenn,dc=org" method=128
 Jul 20 17:44:00 ldap slapd[61655]: conn=0 op=0 BIND dn="cn=root,dc=weithenn,dc=org" mech=SIMPLE ssf=0
 Jul 20 17:44:00 ldap slapd[61655]: conn=0 op=0 RESULT tag=97 err=0 text=

步驟7.設定 SSH 服務使用 PAM 進行認證

/etc/pam.d 內有許多相關的網路服務,若想讓該網路服務能利用 pam_ldap 來進行認證處理就加上如下一行吧

 auth            sufficient      /usr/local/lib/pam_ldap.so              no_warn try_first_pass

目前已經確定系統能認證 LDAP Account 了,修改 SSH 服務驗證檔案使 LDAP Account 也能進行 SSH 登入。

 #vi /etc/pam.d/sshd 
 #auth
 auth            required        pam_nologin.so               no_warn
 auth            sufficient      pam_opie.so                  no_warn  no_fake_prompts
 auth            requisite       pam_opieaccess.so            no_warn allow_local
 #auth           sufficient      pam_krb5.so                  no_warn try_first_pass
 #auth           sufficient      pam_ssh.so                   no_warn try_first_pass
 auth            sufficient      /usr/local/lib/pam_ldap.so   no_warn try_first_pass      //加上此行
 auth            required        pam_unix.so                  no_warn try_first_pass

修改成功後雖然 LDAP Account 能透過 SSH 登入 LDAP Server,但新建立的使用者再 SSH 登入之後會出現訊息說找不到使用者家目錄,此時我們可使用剛才安裝的 pam_mkhomedir 套件讓使用者在進行 SSH 登入後能自動建立該使用者家目錄。

 #vi /etc/pam.d/sshd
 # session
 #session        optional        pam_ssh.so
 session         required       /usr/local/lib/pam_mkhomedir.so    //加上此行
 session         required        pam_permit.so

步驟8.測試 SSH 登入

上述設定完成後進行測試看 LDAP Account 使用者帳號 test 能不能 SSH 登入到 LDAP Client 機器。

 #ssh test@localhost   //試試能不能 SSH 到本機
 Password:             //輸入 LDAP Account test 密碼

成功登入後再輸入 id 指令查看使用者資訊是否正確

 >id                   //LDAP Account 順利登入 LDAP Client Host
 uid=18000(test) gid=18000 groups=18000

參考

[ jnlin blog Enable nss_ldap in FreeBSD]

[ OpenLDAP跟FreeBSD…(續)]

[永远的UNIX > LDAP ]

[FreeBSD 5.3OpenLDAP の設定]

[ FreeBSD 5.1-RELEASEにおける新機能の概要と活用例 (2/6)]

[OpenLDAPの設定]

[雄的 FreeBSD 筆記‧以 LDAP 整合帳號]

Me FAQ

Q1.nss_ldap/pam_ldap/nsswitch.conf 設定完成後重新啟動 slapd 服務超久?

Error Meaage:

設好後能用 id 及 finger 指令查建立的 user 但重新啟動 slapd 服務會非常久才啟動完成 (大約三分鐘) 且啟動後 Log 出現如下訊息

 #tail /var/log/messages
 Jul 15 13:47:21 ldap slapd[11059]: nss_ldap: could not search LDAP server - Server is unavailable

LDAP Log 如下

 # tail /var/log/ldap.log
 Jul 14 11:46:58 ldap slapd[2891]: nss_ldap: failed to bind to LDAP server ldap://127.0.0.1: Can't contact LDAP server
 Jul 14 12:10:15 ldap id: nss_ldap: could not search LDAP server - Server is unavailable

Ans:

先在 ldap.conf 內加上 bind_policy soft 選項後,就能服務重新啟動成功(大約三十秒),我也有在 ldap.conf 內加入 rootbindn 並配合 nss_ldap.secret,或加上 binddn/bindpw 但似乎結果都一樣,以下為相關討論

Q2.id 指令查詢 LDAP Account 發現 Log 有錯誤訊息?

Error Meaage:

使用 id 指令查詢建立的 LDAP Account 雖然能正確查到但查看 ldap.log 發現有一行錯誤訊息

 Jul 27 16:14:12 ldap slapd[53185]: <= bdb_equality_candidates: (uid) index_param failed (18)
 Jul 27 16:14:12 ldap slapd[53185]: <= bdb_equality_candidates: (gidNumber) index_param failed (18)

Ans:

原來是因為我在 slapd.conf 沒有作 LDAP account 的相關索引所以出現這樣的訊息,修改 slapd.conf 建立使用者索引吧

 index   ou,cn,sn,mail,mobile                    eq,pres,sub
 index   uid,uidNumber,gidNumber,loginShell      eq,pres 

Q3.修改 slapd.conf 加入索引後 id 指令反而查不到 LDAP Account?

Error Meaage:

在 slapd.conf 加入相關索引後,這時使用 id 指令卻反而查不到 LDAP Account

Ans:

更改索引設定後記得要重建索引使用 slapindex 指令即可 (記得使用此指令以前 slapd 服務要先停止)

 #/usr/local/etc/rc.d/slapd stop       //停止 slapd 服務
 #slapindex -f slapd.conf              //建立索引
 #/usr/local/etc/rc.d/slapd start      //啟動 slapd 服務
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com