因為手上FreeBSD機器數太多, 想整合一下登入帳號, 於是有了這篇.
1. 架構
A. FreeBSD支援PAM
B. PAM中有pam_ldap
C. 有LDAP (AD在這邊無法比照辦理)
D. 所以架構是FreeBSD ---透過PAM---> LDAP認證
2. 安裝
A. 安裝nss_ldap
cd /usr/ports/net/nss_ldap && make install clean
B. 安裝pam_ldap
cd /usr/ports/security/pam_ldap && make install clean
C. 安裝pam_mkhomedir, 讓LDAP user在local端沒有home dir.時可以自動產生.
cd /usr/ports/security/pam_mkhomedir && make install clean
3. 設定
A. ldap.conf: 在/usr/local/etc下會有ldap.conf.dist把他複製/更名為ldap.conf
mv /usr/local/etc/ldap.conf.dist /usr/local/etc/ldap.conf
B. 在ldap.conf中, 設定以下欄位
host ldap.example.com (依你的LDAP DN or IP)
base ou=users,dc=ldap,dc=example,dc=com (依你的LDAP規畫)
uri ldap://ldap.example.com/ (依你的LDAP DN or IP)
rootbinddn cn=manager,dc=ldap,dc=example,dc=com (要用什麼帳號登入LDAP進行查詢)
port 389 (預設即為port 389)
scope one (設定搜尋範圍)
bind_policy soft (設定連線失敗時的動作)
pam_filter objectclass=posixAccount (這邊是過濾的選項,可以用來決定那些種類的帳號可以進行認證)
pam_login_attribute uid (設定要用什麼欄位的資料當做帳號, 也可以是cn, display ...etc.)
C. 設定ldap client登入用的密碼
ee /usr/local/etc/ldap.secret (直接把ldap.conf中對應rootbinddn帳號的密碼寫入後存檔)
chmod 400 /usr/local/etc/ldap.secret (因為有密碼, 所以改為只有root可以讀)
D. 生出nss_ldap.conf與nss_ldap.secret: 由於ldap.conf與nss_ldap.conf設定完全相同, secret檔也是, 所以用ln的
ln -s /usr/local/etc/ldap.conf /usr/local/etc/nss_ldap.conf
ln -s /usr/local/etc/ldap.secret /usr/local/etc/nss_ldap.secret
E. 修改/etc/nsswitch.conf
預設的 group_compat 是 group_compat: nis 改成 group_compat: ldap nis
預設的 passwd_compat 是 passwd_compat: nis 改成 passwd_compat: ldap nis
F. 修改本機帳號檔與群組檔: /etc/master.passwd與/etc/group
vipw
在最下面加入 +:*::::::::
ee /etc/group
在最下面加入 +:*::
G. 測試: 這時應該可以測試一下是否抓得到LDAP user了
id ldap_user_account
如果出現帳號uid, gid等資訊, 就是成功了.
如果出現no such user, 就是連線失敗, 要再檢查以上設定.
H. 設定ssh 登入
ee /etc/pam.d/sshd 在auth 那一段中的最上面加入以下
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
在session 那一段中加入以下
session required /usr/local/lib/pam_mkhomedir.so
I. 設定本機登入: 修改內容比照上一步
ee /etc/pam.d/login
J. 試著在本機與透過SSH登入看是否能夠登入, 而登入後是否會自動建立家目錄.
留言列表