使用者帳號
系統必須提供每個使用者帳號兩種類型的資訊:
.帳號資訊:UID 編號、預設的 Shell、家目錄、使用者群組、GID 編號等。
.認證資訊:分辨使用者登入時提供的密碼正確與否的方式。
帳號的資訊儲存在 /etc/passwd 檔案中,而認證資訊則儲存在 /etc/shadow 之中,每筆資訊存在獨立一行之中。
一般的應用程式或名稱服務(如 LDAP、NIS )不會直接存取 /etc/passwd 檔案,而是透過系統中的 C 函式庫中 libc 所提供的方法,如 getpwnam() 來取存 /etc/passwd 的資訊。
==============================
名稱服務選擇 ( Name Service Switch, NSS )
NSS (名稱服務選擇) 提供了設定使用那種名稱服務 ( Name Service ) 的函式庫及方法,讓 libc 呼叫,其函式庫放置在 /lib/libnss_SERVICE.so.2 之中,如使用 /etc/passwd 認證的函式庫為 /lib/libnss_file.so.2、使用 LDAP 認證就引用 /lib/libnss_ldap.so.2。
# ls /lib/libnss_*
/lib/libnss_compat-2.5.so /lib/libnss_hesiod.so.2
/lib/libnss_compat.so.2 /lib/libnss_ldap-2.5.so
/lib/libnss_db-2.2.so /lib/libnss_ldap.so.2
/lib/libnss_db.so.2 /lib/libnss_nis-2.5.so
/lib/libnss_dns-2.5.so /lib/libnss_nisplus-2.5.so
/lib/libnss_dns.so.2 /lib/libnss_nisplus.so.2
/lib/libnss_files-2.5.so /lib/libnss_nis.so.2
/lib/libnss_files.so.2 /lib/libnss_winbind.so.2
/lib/libnss_hesiod-2.5.so /lib/libnss_wins.so.2
NSS 的設定檔是 /etc/nsswitch.conf,列出了要查詢那種類別的資訊時,要使用那種認證方式,也就是說要使用那一個 libnss_SERVICE.so.2,例如:
passwd: files nis ldap (先使用 libnss_files.so.2,再使用 libnss_nis.so.2,最後使用 libnss_ldap.so.2 )
shadow: files
group: files
hosts: files dns (先使用 libnss_files.so.2,再使用 libnss_dns.so.2 )
舉例來說,當 libc 函式庫使用 gethostbyname_r() 的方法時,NSS 會到 /etc/nsswitch.conf 找到 hosts: files dns 這一行,依照設定先呼叫 libnss_files.so.2 的 _nss_files_gethostbyname_r,再呼叫 libnss_dns.so.2 的 _nss_dns_gethostbyname_r。
看一下 libnss_dns.so.2 提供和 gethostbyname 相關的方法:
# nm /lib/libnss_dns.so.2 | grep “gethostbyname”
000025d0 t __GI__nss_dns_gethostbyname3_r
00002970 T _nss_dns_gethostbyname2_r
000025d0 T _nss_dns_gethostbyname3_r
000028a0 T _nss_dns_gethostbyname_r
==============================
getent
getent 是查詢名稱服務資料庫的程式,使用方式:
#getent DATABASE
例:
# getent hosts
127.0.0.1 station localhost.localdomain localhost
#getent DATABASE NAME
例:
# getent passwd root
root:x:0:0:root:/root:/bin/bash
==============================
認證 Authentication
通常應用程式使用 NSS 來儲存使用者的資訊和密碼,在使用者登入過程中,應用程式會將輸入的密碼演算,再使用 getpwnam() 函式來尋找和比對在 NSS 中儲存的已演算過的密碼,當兩者相同時,就表示輸入的密碼正確。
自動引用通知: ISHM Blog » 使用者管理(三)