|
|||
2006/07/28 修改 | |||
一般來說,FreeBSD 的主機預設是以本機 /etc 目錄中的密碼檔 (passwd, pwd.db, master.passwd, spwd.db) 和 /etc/group 來識別使用者身份及供作認證資料, 自 FreeBSD 5.x 開始引入了 NetBSD 中的 NSS (Name Service Switch) 機置,讓系統的認證方式更多元。 下面是利用 LDAP 集中認證資料於 LDAP Server 上,其它主機再利用 pam_ldap 及 nss_ldap 來向 LDAP Server 要資料並驗證使用者的帳號和密碼,以取得登入系統的權力。 1 LDAP Server 端首先我們先架設一台 LDAP Server 來儲存使用者的帳號資料,供其它的 servers 來查詢,下面以 OpenLDAP 2.2 來說明安裝的流程。 1-1 安裝 OpenLDAP 2.2最懶的、最快的方法當然是透過網路用 packages 來安裝囉!執行以下的指令:
不然就是用 ports 來自己編譯,確定已經更新好 ports tree 後執行底下指令:
不論以前述的哪一種方法安裝,如果正常的話,應該都會安裝了 OpenLDAP 2.2 版的 server 和 client 端的程式。
1-2 設定 OpenLDAP Server安裝完 OpenLDAP 以後,系統中應該會多一個叫 /usr/local/etc/openldap 的目錄,裡面有兩個我們需要修改的設定檔:
1-2-1 修改 /usr/local/etc/openldap/slapd.conf利用 FreeBSD 的 packages/ports 安裝完 OpenLDAP 會附上一個叫 slapd.conf.default 的檔案供我們參考,如果 sldapd.conf 不存在,可以先將 slapd.conf.default 複製成 slapd.conf 後,再執行以下的指令來修改 slapd 的設定檔:
我們至少在裡面置入以下的內容:
其中的 suffix , rootdn , rootpw 請自行更換內容,這三個選項的意義如下:
注意:前述的設定內容少了 ACL 來控管資料的存取權限,也就是任何人都可能透過 LDAP 的查詢取得密碼,相當的危險,所以,測試完後別忘了要加上 ACL 的設定作管制。
1-2-2 建立基本的資料假設以 happ.edu.tw 為例,我們先建立存放 user 帳號資料 (類似原來的 /etc/master.passwd的資料) 和 group 資料 (相當於原來的 /etc/group) 的 container 。 編輯一個叫 /root/container.ldif 的文字檔,裡面放入底下的內容:
藍色的部份請自行置換成自己的資料,存好檔後我們就可以準備匯入 LDAP Server 中,執行以下指令:
1-2-3 轉移系統帳號到 LDAP Server如果想把現有的 /etc/master.passwd 和 /etc/group 匯入 LDAP Server 中,我們可以利用下面由 padl.com 所釋放出來的工具轉換後再匯入 LDAP Server 中: 先由 http://www.padl.com/OSS/MigrationTools.html 網頁中下載 MigrationTools.tgz ,將該檔案解開後先修改裡面的 migrate_common.ph ,配合前一節中 container.ldif 中的設定修改下面兩行:
藍色部份請自行置換。 由於轉換密碼檔的程式 migrate_passwd.pl 並非針對 FreeBSD 寫的,所以我們也要稍作修改,將下面這行:
改為下面的內容 (寫成一行哦!):
主要是 /etc/maser.passwd 的欄位比一般的 passwd 檔的,多了三個欄位的關係。 接著我們就可以進行轉換了,在 MigrationTools 的目錄中執行:
下面是 /etc/master.passwd 轉完的其中一筆資料:
注意:上面轉出的 objectClass 為 account , posixAccount , top ,這樣的資料可在 FreeBSD, Linux 上通用,如果 objectClass 有 shadowAccount ,FreeBSD 的 client 端的 nss_ldap ports 要經過修改後才可以抓到正確的密碼欄位。 下面是 /etc/group 轉完的其中一筆資料:
最後,再將 /root/user.ldif 和 /root/group.ldif 匯入 LDAP Server,執行:
1-2-4 啟動 OpenLDAP Server和其它服務一樣,我們要啟動 OpenLDAP Server 要先在 /etc/rc.conf 中加入下面這行:
然後就可以執行下面的指令來啟動 LDAP 服務:
要暫時停止服務當然就是執行:
1-2-5 查詢 LDAP Server 中的資料在 OpenLDAP 的 client 程式中有個叫 ldapsearch 的工具可以讓我們查詢 LDAP Server 中的資料,使用之前我們先修改 /usr/local/etc/openldap/ldap.conf ,假設我的 LDAP Server 主機叫 test.happy.edu.tw ,就在 ldap.conf 裡面加入底下的內容:
藍色的部份請自行置換。 存好檔後我們就可以來測試一下囉:
如果不想改修改 /usr/local/etc/openldap/ldap.conf ,或是想查其它的 LDAP Server ,我們也可以執行下面的指令:
ldapsearch 詳細的用法請自行 man ldapsearch 。 執行完應該會看到之前匯入的資料顯示在螢幕上。確定可以進行查詢後,我們就可以測試由別台主機來查詢資料並進行認證的部份。
2 LDAP Client 端在 LDAP Client 端的主機上我們至少要安裝 pam_ldap 和 nss_ldap 。 2-1 安裝 pam_ldap 和 nss_ldap如果使用舊版的 nss_ldap ,由 LDAP Server 查詢到的使用者資料如果有 shadowAccount 的 objectClass ,對於密碼會有錯誤的處理,會因此而導致登入失敗,所以建議 nss_ldap 最好先更新 ports tree 後,利用 ports 來安裝最新版的程式,以免產生困擾。 安裝 net/nss_ldap:
安裝 security/pam_ldap:
2-2 設定 pam_ldap 和 nss_ldappam_ldap 和 nss_ldap 的設定檔內容其實是一樣的,檔案分別叫 /usr/local/etc/ldap.conf 和 /usr/local/etc/nss_ldap.conf,所以我們可以先修改 /usr/local/etc/ldap.conf (可別和 /usr/local/etc/oepnldap/ldap.conf 搞混了!) 然後再用 soft link 處理 nss_ldap.conf 。 執行以下指令修改 /usr/local/etc/ldap.conf:
然後依 LDAP Server 的設定來修改以下的內容:
說明:
最後,建立一個 soft link 來產生 /usr/local/etc/nss_ldap.conf,執行以下指令:
2-3 修改 /etc/nsswitch.conf重頭戲來了,我們要修改 /etc/nsswitch.conf ,告訴系統使用 LDAP 來查使用者的資料,這個檔案有兩種改法,第一種方式要修改三個檔案,而第二種方法只要改一個檔案,自己選擇囉。 2-3-1 修改 /etc/nsswitch.conf 第一種方法假設 FreeBSD 5.x , 6.x /etcnsswitch.conf 的原始內容為:
修改 group_compat 和 password_compat 的那兩行為底下的內容後存檔:
再來如同架設 NIS 一樣,要修改密碼檔和 /etc/group。
上面兩個的冒號數可別算錯了,要是覺得麻煩,可以採用底下的第二種方法,只要修改 /etc/nsswitch.conf 即可。
2-3-2 修改 /etc/nsswitch.conf 第二種方法第二種方法只要修改 /etc/nsswitch.conf 即可,假設原來的內容為:
我們將它改為底下的內容:
將原來紅色的那四行加上井字號註解掉,新增藍色的那二行。上面設定的意思是,先查本機的資料,如果沒有該使用者,再向 LDAP Server 查詢
2-3-3 測試設定好 /etc/nsswitch.conf ,我們可以執行 id 這個指令來測試:
上面的例子 ming 這個帳號是由 LDAP Server 提供的,再來也可以用 finger 帳號 來查詢 LDAP Server 上建立的帳號。最後可以測試 telnet , ssh , ftp ...... 等服務。 如果用前面的方法一修改 nsswitch.conf ,執行完 id 的結果只出現:
可能是忘記在 /etc/group 後面加上 +:*:: 了,如果出現 "no such user" ,則可能是密碼檔的後面沒加 +:*:::::::: 。 註:本來應該是要改 /etc/pam.d 中的檔案才可以測試 telnet , ssh , ftp ...... 的,可是我在 FreeBSD 5.4R 和 FreeBSD 6.1 R 上都是改完 /etc/nsswitch.conf 就可以登入囉!
3 其它3-1 幫使用者自動產生 HOMEDIR如果希望使用者在登入後可以自動建立他的 HOME 目錄,可以安裝下面 pam_mkhomedir 的 ports ,執行下面的指令:
然後,在 /etc/pam.d/login 或 /etc/pam.d/sshd 中加入底下的這行:
這樣,下次使用者用 telnet 或 ssh 登入時即可自動幫他建立好 HOME。
3-2 Linux 上的設定在 Linux 主機上我們如果裝好 libpam-ldap 和 libnss-ldap ,設定好後就可以和 FreeBSD 共用使用者資料,再加上 pam_mkhomedir.so (以 Debian 為例),連使用者目錄都可以自動建立好。 以 Debian 來說,libpam-ldap 和 libnss-ldap 的設定檔路徑是:
設定的內容和 FreeBSD 一樣。 而 /etc/nsswitch.conf 則將下面的三行改為:
基本上,改完上面的檔案,應該就可以執行 id , finger ..... 或進行本機登入、telnet 、ftp ...... ,如果想用 ssh 登入則需要再修改 /etc/pam.d/ssh 的設定,以 Debian 為例,先找到 auth required pam_env.so 這行,然後在它的下面加上這三行:
改好存檔後即可用 ssh 來測試了。
北市文山區力行國小顏國雄 |