帳號管理

使用者帳號

系統必須提供每個使用者帳號兩種類型的資訊:

.帳號資訊: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 中儲存的已演算過的密碼,當兩者相同時,就表示輸入的密碼正確。

在〈帳號管理〉中有 1 則留言

  1. 自動引用通知: ISHM Blog » 使用者管理(三)

留言功能已關閉。