ldap install and linux users

Name Service Switch 是 Linux 幫助查詢與統整各式資料的協定,例如帳號、群組、主機名稱~

PAM 則是帳號認證的模組,讓你可以動態的換掉認證的方式。

透過 Ldap 資料庫跟這兩個模組的合併,對伺服器帳號統整管理有很大的威力~

這文章主要在介紹大致上需要安裝的流程與相關設定檔,並簡介 ldap 相關概念。

$ yum install ldap ldap-clients ldap-servers

#client 設定檔 用於指令 ldapadd , ldapsearch ..
$ vim /etc/openldap/ldap.conf

#server 設定檔 , 用於 Server 運作設定檔.
$ vim /etc/openldap/slapd.conf

主要設定 dn=Manager,dc=domain,dc=com 這些東西變成你自己的,還有密碼 rootpw 這東西~ 另外啟動的時後會出現如下的錯誤:


$service ldap start

bdb_db_open:
   Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2)

參考這個網頁 http://readthefuckingmanual.net/error/1256/ 提到要複製一個設定檔 ,CentOS 如下,重啟就ok了


$cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

$chown ldap:ldap /var/lib/ldap/DB_CONFIG

途中要新增時不斷遇到密碼錯誤的問題,結果是設定檔要求很嚴格…
ldap_bind: Invalid credentials (49)

passwd[tab]secret #ok
passwd[tab][space]secret #error
 passwd[tab]secret #error

觀念:

  • RDN:Relative Distinuished Name 每個 Node 都有一個名字再他自己的層級裡面是獨一無二的。例如 dn=Manager 這個 Manager 就是他自己同階層只有一個叫 Manager 的物件。
  • DN:Distinuished Name 對整個樹狀結構來講,都是獨一無二的節點名稱,所以就要包括整個樹狀結構的層級了,例如 dn : cn = mlwmlw,o = antslabt.tw  ,antslab 的 mlwmlw 就能定位到這個單位的 mlwmlw 這個人了,他的 rdn 就是 mlwmlw
  • objcetclsss: 每個 node 都會有他的類別,每個類別都有很多屬性(attr),這種類別可以繼承,跟物件導向的概念差不多,ldap 有一些內建標準的類別,例如 organization 是公司的類別,就需要設定公司所需要的屬性,例如公司名字、電話、員工等等~, 這些內建的 schema 都放在 /etc/openldap/schema/.. 下面例如 core.ldif 的 organziational 一個 objectclass 的定義大概就是名稱(name)、描述(desc)、繼承自(sup)、必要屬性(must)、選用屬性(may)
olcObjectClasses: ( 2.5.6.5 NAME 'organizationalUnit'
  DESC 'RFC2256: an organizational unit'
  SUP top STRUCTURAL
  MUST ou
  MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $
  x121Address $ registeredAddress $ destinationIndicator $
  preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
  telephoneNumber $ internationaliSDNNumber $
  facsimileTelephoneNumber $ street $ postOfficeBox $障 postalCode $
  postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) )

attribute: 屬性,因為 objcetclass 會定義一個類別裡面會有什麼資料,而資料的型態跟內容就靠這個定義,
下面是一個範例,定義了 id、名稱、描述、型態,繼承自~

 olcAttributeTypes: ( 2.5.4.10 NAME ( 'o' 'organizationName' )
   DESC 'RFC2256: organization this object belongs to'
   SUP name )

例如上面的 organization 就需要(must)填 o (organziationName)  屬性

管理軟體:

試了 phpldapadmin 感覺不是很完整,按一按就出錯了~

後來改用  ldap-account-manager 感覺比精簡幹要~介面也比較和善~還有中文呢~

只是他是針對帳號管理設計的,對於完整設定的 objcetclass 較缺乏,可以用 ldapadmin 這個 桌面 gui 軟體來管理。

帳號整合:

因為要把所有 linux 帳號都轉到 ldap 資料庫內,所以需要一些工具輔助。

http://www.padl.com/OSS/MigrationTools.html

解壓縮以後裡面有一些工具跟設定檔,要改設定檔裡面 mirgate_common.ph 的 base dc ~

這樣指令就正常能運作了~

$ migrate_passwd.pl /etc/passwd users.ldif
$ migrate_group.pl /etc/group group.ldif

這樣就能把使用的資料跟群組都轉出來了,這邊注意 passwd 要用 root 去轉,因為他會去讀 /etc/shawod 的資料,如果不是 root 會沒有權限,跑出來 userPasswd 都是 {crypt}x。

然後就用


ldapadd -x -f user.ldif -D "cn=Manager,dc=antslab,dc=tw" -W

導入到 ldap Server 裡面~

然後就可以用 ldap Server 來驗證使用者登入了,要設定 nsswitch 跟 pam_ldap,這東西都要先裝好~

只是小心不要裝太新的預設應該就有了…我手癢用 ius 裝太新的就出事了…針對 host 認證那邊一直卡住


$ authconfig --enableldap --enableldapauth --update

authconfig 好像修改認證方式的工具,還有 gui 的介面,這個是命令列的版本,這樣就能啟用 ldap 登入了~可以用 authconfig –test 來檢視看看 ldap 跟 pam_ldap 有沒有 enabled ,

如果有就ok囉~

登入限制:

如果要管理的伺服器有很多,想要限制特定的使用者才能登入伺服器,可以幫使用者加上 account 這個 classobject 他裡面有一個 host 的屬性,這個屬性可以是一個集合,也就是用來檢查這個使用者所能登入的伺服器,如果設 host: * 就代表不限制,然後啟用 ldap 的伺服器就要將 /etc/ldap.conf 裡面的參數打開


pam_check_host_attr yes

這樣就能針對 host 做登入限制了,但是 host 要填什麼呢?

可以填該主機的 hostname 例如 ldap server 本機就可以是 localhost ~

或者是伺服器查的到的 dns name ,例如 mlwmlw.org 有在 /etc/hosts 裡面建表 or dns 查的到,

按照 NSS 查 hosts 的順序查得到的都 ok。

可以用這個 host 指令來確認 例如 mlwmlw.org 會回傳 mlwmlw.org has address 140.133.76.27。

這樣 host 裡面的值就能打 mlwmlw.org 就能登入該台主機了。應該也可以用 ldap 來當作 hosts 的查詢來源,管理上會更完整。

另外一提有一個 inetOrgPerson 有類似通訊錄的屬性可以用,好像可以整合一些 outlook 的軟體,但是跟 account 有衝突,所以不能有通訊錄跟 host……參考資源[7] 裡面有對這部份做些中文描述,

參考[8] 也提出了比較完整的解法。

dokuwiki:

dokuwiki 也可以設定 用 LDAP 登入~

只要去改 conf/local.conf 加上下面的設定~


# 維基管理者 superuser , 也可以是一個群組 @wiki_admin
$conf['superuser'] = 'mlwmlw';
$conf['useracl'] = 1;
# 關閉註冊
$conf['openregister'] = 0;
#驗證方式
$conf['authtype'] = 'ldap';
#伺服器
$conf['auth']['ldap']['server']      =
'ldap://ldap.antslab.tw:389'; #instead of the above two settings
$conf['auth']['ldap']['usertree']    =
'ou=People, dc=antslab, dc=tw';
$conf['auth']['ldap']['grouptree']   =
'ou=Group, dc=antslab, dc=tw';
$conf['auth']['ldap']['userfilter']  =
'(&(uid=%{user})(objectClass=posixAccount))';
$conf['auth']['ldap']['groupfilter'] =
'(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))';

參考資源:

  1. 中文 http://man.lupaworld.com/content/manage/ringkee/openldap.htm
  2. 英文 http://man.lupaworld.com/content/database/LDAP/guide.html
  3. skill 1st http://www.skills-1st.co.uk/papers/ldap-schema-design-feb-2005/ldap-schema-design-feb-2005.html
  4. phpldapadmin http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page
  5. ldap 實作筆記 酷學園 http://www.study-area.org/phorum/index.php?PHPSESSID=ar3e900fl9d4rsnfllaqm71e75&topic=26522.0
  6. 流程 http://life.iiietc.ncu.edu.tw/xms/read_attach.php?id=6252
  7. 限制host http://dominic16y.world.edoors.com/CjAAdrehFwiU
  8. 解釋了 ldap 與 pam 的整合 http://wiki.debian.org/LDAP/PAM
  9. http://www.vitki.net/book/page/nss-and-pam-ldap

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *