2010年9月6日

為 Ubuntu 加上 LDAP 驗證登入並提供 FTP 服務

為了把學生用檔案主機服務轉移至新電腦,就一併加入 LDAP 驗證及自動建立家目錄等功能,讓每學期的維護作業自動化。

關鍵字: ubuntu, ldap, vsftpd, pam_ldap

先以最簡安裝 Ubuntu Server 10.4 (Lucid Lynx) ,即在安裝步驟中只勾選 OpenSSH Server,以利遠端登入。


階段一:為 LDAP 名錄增加 posixAccount 及 shadowAccount


階段二:讓 Ubuntu 可以透過 LDAP 本地登入

安裝相關套件
$ sudo apt-get install libpam-ldap libnss-ldap nss-updatedb libnss-db
實際上會多安裝 auth-client-config, ldap-auth-client, ldap-auth-config, libdb4.6 ,過程中會需要設定 LDAP 連線資訊。
LDAP server Uniform Resource Identifier:
ldap://ldap.example.com/
# 如果你沒有啟用 LDAPI,就別用預設的 ldapi:// 來設定,不然會連不上。

Distinguished name of the search base:
ou=users,dc=example,dc=com

LDAP version to use:
3

Make local root Database admin:
No
# 如果要讓 User 可以透過 passwd 修改 LDAP 上的密碼,請選 Yes ,當然,這需要
# 其它 LDAP Server 上的權限設定,因為我有提供統一的修改密碼網頁,故選 No

Does the LDAP database require login?
No

Override local changes to /etc/pam.d/common-*?
Yes
LDAP 連線參數將儲存於 /etc/ldap.conf ,可於日後視需求修改。

接下來修改位於 /etc/pam.d/common-* 的 PAM 設定檔。
# common-auth
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so

# common-account
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so

# common-password
password [success=2 default=ignore] pam_unix.so obscure sha512
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
password requisite pam_deny.so
password required pam_permit.so

# common-session
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
# 下面這行是讓系統自動依帳號範本建立家目錄
session required pam_mkhomedir.so skel=/etc/skel/
session required pam_unix.so
session optional pam_ldap.so
修改 /etc/nsswitch.conf
passwd: files ldap
group: files ldap
至此應該已可以透過本地登入系統,可以 id 測試是否能正確查得 NIS 資訊。
$ id u501
uid=5001(u5001) gid=5001(employee) groups=5001(employee)
再透過本地登入,看是否成功驗證登入並自動建立家目錄。
$ su - u501
Password: (secret)
u501@ubuntu:~$


階段三:讓 Ubuntu 可以透過 SSH 遠端登入

由於 SSH 預設即經由 PAM 驗證,所以只要 LDAP 帳號可於本地登入,不需額外設定即可透過 SSH 登入了。


階段四:安裝 vsftpd 且只讓 LDAP 帳號連線

安裝所需套件。
$ sudo apt-get install vsftpd
修改 /etc/pam.d/vsftp 設定
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# 以下自訂, 僅讓 ldap user 使用 ftp 連線
account required pam_ldap.so
session required pam_mkhomedir.so skel=/etc/skel/
session optional pam_ldap.so
auth required pam_ldap.so
auth required pam_shells.so
修改 /etc/vsftpd.conf
# 為了安全起見,限制 ftp 登入後只能存取自己的家目錄的內容
chroot_local_user=YES

# 開啟寫入權限,這樣 user 才能上傳資料至家目錄
write_enable=YES

# 設定 umask 為 022 (即檔案為644,目錄為755),這樣 user 的個人網頁才能運作
local_umask=022

# 讓 vsftpd 支援 session ,不然無法透過 LDAP 驗證登入,務必加這行
session_support=YES
重新啟動 FTP Server
$ sudo service vsftpd restart
用 FTP Client 軟體連線試試,應該要能夠登入並自動建立家目錄,如果為了避免 LDAP 帳號透過 SSH 登入而將 login shell 設成 /bin/false 時,請於 /etc/shells 內加一行:
/bin/false

收工!

沒有留言: