Bookmark and Share
Section
(4).LDAP + Host 控管 on Debian Lenny
(Publish Date: 2009-6-6 4:53am, Total Visits: 1174, Today: 2, This Week: 11, This Month: 9)

...

LDAP + Host 控管 on Debian Lenny

本教學使用環境 debian 5 lenny。本文功能:讓你用 LDAP 認證搭配 host (主機)控管,設定你的 user 哪些機器可以登入,哪些機器不可以登入。

請在測試機器上實作成此教學再去應用,因為設定過程失敗或錯誤的話,是會造成你連 root 都登不進系統的,那我也無解。

紅字為指令,或需要你輸入的地方。藍字部份為設定檔內容。

(1).建立 ldap server

首先請按此篇教學建立起 ldap server

(2).下載 ldap 管理工具

LDAP Admin 官方網站

LDAP Admin 下載點備用載點

參照下圖的設定連入你的 ldap server

(3).刪除 root 帳號

我們必須針對 root 帳號 增加一個 objectClass 為 account 才能有 host 這個欄位讓我們填入要指定登入的主機。

如上圖所示,目前的 objectClass 沒有 account 這東西,我曾試著加過,但加不進去,加了會報如下圖的錯誤

只知它大概的意思是和 inetOrgPerson 這東西去衝到,目前我尚沒有能力完美的解決這個問題,只能用較遜的解法來解,就是把 root 帳號刪掉重新手動建一個。(關於完美解法請直接跳到第 (6). 步驟看吧! 換句話說,如果你需要使用到PDC和 Windows 網域功能的話,請略過第 3、4、5的步驟,直接進入第6步驟)

接下來你就自己把 root 帳號給刪了吧,對它點滑鼠右鍵就能刪。

↑注意:這個動作會使的你 root 不能幫其它的電腦加入Windows網域,除非你不需使用 Windows網域的功能,刪前請三思,若你要反悔其實也有補救方法,請下指令:

smbldap-userdel root
smbldap-useradd -a root
smbldap-passwd root


然後用 Ldap Admin 去將root 的 uidNumber 和 gidNumber 都改為 0,若你還有設定檢查 host 值登入的話,別忘了在 host 那欄填上 * 號,否則 root 會無法登入任何一台主機。

(4).建立 root 帳號

對著 ou=people 點滑鼠右鍵,選 New→ Entry...

參照上圖的設定:1.請先在左方加入那三個項目。 2.在右方填入資枓,黑體字和我用紅框框起來的是必填項目。 3.最後再點左上角的 Rdn,選跟我一樣(必須設為 uid=root)。

PS: root 帳號必備這三個 objectClass: account, posixAccount, shadowAccount否則 root 會出錯。而一般的 user 只要這兩個 objectClass:account, posixAccount 再設密碼後即可登入。特別說明的是 account 這個項目也不一定是必備,準確的說是因為我們需要 host 這個欄位,所以才會需要它,但經完美解法後, inetOrgPerson 這個項目也能有 host 這欄位,因此就可用其取代 account 這個項目了。 (objectClass 中文意思較難懂,我是用比較俗的叫法把它叫成項目了,我隨便取的啦。)

(5).設立 root 密碼

如果你是按我的教學一路做下來的話,那麼這裡請選擇 MD5 加密。

改完後,你試著讓 root 用新密碼登入看能否成功,若不能用新密碼登入成功,請回頭檢查哪裡做錯了,確定能用新密碼登入 root 後,再接著往下做,因為接下來的設定,沒設好的話,會造成連 root 都無法登入。

(6).增加 host 欄位完美解法

因為 inetOrgPerson 和 account 這兩個 objectClass 項目相衝突,兩個沒辦法同時用只能擇其一。 account 裡只有一個欄位 "host" 是我們需要用到的用來指定能登入的主機,而 inetOrgPerson 裡卻有許多欄位是 outlook/雷鳥 通訊錄所會用到的欄位(無法捨棄它啊~~~),所以解法是在 inetOrgPerson 裡增加一個 host 欄位。(這個欄位是我用比較通俗的叫法啦!依 LDAP 文件所示正式名稱係叫做 attribute (屬性)。)

編輯 inetOrgPerson.schema 檔

vim /etc/ldap/schema/inetorgperson.schema

移到檔案的最後,找到如下內容:

objectclass ( 2.16.840.1.113730.3.2.2

NAME 'inetOrgPerson'

DESC 'RFC2798: Internet Organizational Person'

SUP organizationalPerson

STRUCTURAL

MAY (

audio $ businessCategory $ carLicense $ departmentNumber $

displayName $ employeeNumber $ employeeType $ givenName $

homePhone $ homePostalAddress $ initials $ jpegPhoto $

labeledURI $ mail $ manager $ mobile $ o $ pager $

photo $ roomNumber $ secretary $ uid $ userCertificate $

x500uniqueIdentifier $ preferredLanguage $

userSMIMECertificate $ userPKCS12 )

)

在最後加上一個 $ host 的值,如下方紅字所示。 (忘了說,修改此檔前請先自行備份,免得你改壞了不能用...別忘了ldap的設定檔都很龜毛的)

objectclass ( 2.16.840.1.113730.3.2.2

NAME 'inetOrgPerson'

DESC 'RFC2798: Internet Organizational Person'

SUP organizationalPerson

STRUCTURAL

MAY (

audio $ businessCategory $ carLicense $ departmentNumber $

displayName $ employeeNumber $ employeeType $ givenName $

homePhone $ homePostalAddress $ initials $ jpegPhoto $

labeledURI $ mail $ manager $ mobile $ o $ pager $

photo $ roomNumber $ secretary $ uid $ userCertificate $

x500uniqueIdentifier $ preferredLanguage $

userSMIMECertificate $ userPKCS12 $ host )

)

PS:如果你有做 LDAP server 的 mirror 的話,那麼 mirro 的兩個 server 都得做這個修改的動作,增加 host 欄位。

(7).修改 pam_ldap.conf

vim /etc/pam_ldap.conf

找到此行 pam_check_host_attr yes

將此行前面的 # 號拿掉

PS1: Fedora/centOS 此參數則位於 /etc/ldap.conf 此檔內

PS2: Fedora/centOS 一定要在 /etc/hosts 內加入自己本機的 hostname 對映,此檢查 host 的機制才能正常運作。

(8).修改 common-account 檔

vim /etc/pam.d/common-account

account sufficient pam_ldap.so
↑這行必需要改為下面這樣才行
account required pam_ldap.so

注意:第 (6). 和 (7).的步驟在 ldap 的 server 端與 client 端都要做,這樣它才能檢查 host 這欄位決定是否放行。

參考文章

補充說明:

sufficient → 指出要認證成功,必須滿足此模組的要求,假定之前出現的、required 類型的模組全都執行成功。如果組態檔中已經沒有其它模組可執行,控制流程將會傳回進行呼叫的應用程式。如果 sufficient 類型的模組執行失敗,則會繼續進行認證,並不會因而拒絕存取。

required → 指出要認證成功,此模組必須執行成功。除非此類模組全都被呼叫過了,否則控制流程不會傳回發出請求的應用程式。

(9).重開機,試試 root 能否登入。

若不能登入你就完蛋啦!! 別問我解法,我也不會解。我只有重灌一解。

(10).建其它 user 帳號

若你只是要建單純的 samba 帳號的話,而不讓它能夠登入主機 (含 tty 和 ssh 登入),請用下指令的方式來建會快些。

PS: tty 登入指的是坐在 linux 主機前面打帳號登入。

請下指令

建 user 帳號 ( -a 為建立 windows 使用者帳號 -m 建家目錄)
smbldap-useradd -a -m user1

設定密碼
smbldap-passwd user1

用以上方法新增出來的帳號是沒有 host 欄位可用的。(因為 account 這個 objectclass 項目加不進來)

若是要讓該帳號有 host 欄位的話,得在Ldap Admin這個工具裡自己手動加一個全新的帳號,像第 (4). 步驟那樣增加一個帳號。

經完美解法後,透過上面兩行指令建出來的帳號,就內含 host 這欄位了。

在用指令新增完帳號後,到 Ldap Admin去看就可看到剛加的帳號,對其點右鍵→ Edit Entry...

記得點選上方紅框的按鈕來切換欄位的多少,右方就可見已內含 host 欄位了,不必再新增了。若你沒看到 host 此欄位的話,記得把 Ldap Admin 整個關掉再重開。

須注意的是新建帳號的 host 欄位都是空白的,這欄位若留白,那麼它就不能 ssh 或 tty 登入任何一台主機。

但是此新建帳號 samba 的功能還是能正常使用的。

(11). Samba 權限控管

Samba 的資料夾分享,可設定哪些帳號或群組可寫入這個資料夾,但這個設定是設在每台 samba 主機上的 smb.con 此檔內。

vim /etc/samba/smb.conf

以下是分享資料夾的權限設定參考,經測試 valid users 這參數在 debian lenny 上是有效的。

[Share]
comment = Share
path = /mnt/share
browseable = Yes
read only = No
guest ok = Yes
#write list = username1, username2 (有些版本得用 write list 這參數才有效)
#valid users = username1, username2 (有些版本得用 valid users 這參數才有效)
#write list = @Administrators (屬於 Administrators 群組的人可以寫入,其它人則是唯讀)
#valid users = @Administrators (請自行測試哪個寫法才能用)


LDAP系列文章:

(1).LDAP + Samba PDC + PAM/NSS on Debian Lenny

(2).LDAP client + Samba BDC + PAM + NSS on Debian Lenny

(3).LDAP 備援 on Debian Lenny

(4).LDAP + Host 控管 on Debian Lenny

(5).LDAP client + SMB + NSS + PAM on Fedora

(6).LDAP 與通訊錄