Linux下使用者資訊
-使用者資訊-
** 除了著名的init程式以外,所有的Linux程式都是由其他程式或使用者啟動的。使用者通常是在一個響應他們命令的shell(命令解析器)中啟動程式。程式能夠通過檢查環境變數和讀取系統時鐘來在很大程度上了解它所處的執行環境。程式也能夠發現它的使用者的相關資訊。 當一個使用者要登入進Linux系統時,他有一個使用者名稱和密碼。一旦驗證通過,使用者就可以進入一個shell。從內部機制來說,使用者還有一個唯一的使用者識別符號UID。Linux執行的每個程式實際上都是以某個使用者的名義在執行,因此都有一個關聯的UID。 UID有它自己的型別————uid_t,它定義在標頭檔案sys/tpes.h中。它通常是一個小整數。有些UID是系統預定義的,其他的則是系統管理員在新增使用者時建立的。一般情況下,使用者的UID都大於100。
#include<sys/types.h>
#include<unistd.h>
uid_t getuid(void);
char *getlogin(void);
** getuid函式返回程式關聯的UID,它通常是啟動程式的使用者的UID。 getlogin函式返回與當前使用者關聯的登入名。 系統檔案/etc/passwd包含一個使用者賬號資料庫。它由行組成,每行對應一個使用者,包括使用者名稱、加密口令、使用者識別符號(UID)、組識別符號(GID)、全名、家目錄和預設shell。 如果編寫一個程式,他能確定啟動它的的使用者的UID,那麼就可以對它進行擴充套件、讓它查詢密碼檔案以找到使用者的登入名和全名。但並不推薦這種方法,因為為了提高系統的安全性,現代的UNIX系統都不再使用簡單的密碼檔案了。許多系統,包括Linux,都有一個使用shadow密碼檔案的選項,原來的密碼檔案中不再包含任何有用的加密口令資訊(這些資訊通常存放在/etc/shadow檔案中,這是一個普通使用者不能讀取的檔案),為此,人們定義了一組函式來提供一個標準而又有效的獲取使用者資訊的程式設計介面:
#include<sys/types.h>
#include<pwd.h>
struct passwd *getpwuid(uid_t uid);
struct passwd *getpwnam(const char *name);
密碼資料庫結構passwd定義在標頭檔案pwd.h中,它包含如下的成員:
char *pw_name ———— 使用者登入名 uid_t pw_uid ———— UID號 gid_t pw_gid ———— GID號 char *pw_dir ———— 使用者家目錄 char *pw_gecos ———— 使用者全名 char *pw_shell ———— 使用者預設shell getpwuid和getpwnam函式都返回一個指標,該指標指向與某個使用者對應的passwd結構。這個使用者通過getpwuid的UID引數或通過getpenam的使用者登入名引數來確定。出錯時,它們都返回一個空指標並設定errno。