詳細解析Linux /etc/passwd檔案

2puT發表於2016-07-18

在Linux /etc/passwd檔案中每個使用者都有一個對應的記錄行,它記錄了這個使用者的一些基本屬性。系統管理員經常會接觸到這個檔案的修改以完成對使用者的管理工作。這個檔案對所有使用者都是可讀的。但是Linux /etc/passwd檔案中都有些什麼內容呢?

它的內容類似下面的例子:
#cat/etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:Systemdaemons:/etc:
bin:x:2:2:Ownerofsystemcommands:/bin:
sys:x:3:3:Ownerofsystemfiles:/usr/sys:
adm:x:4:4:Systemaccounting:/usr/adm:
uucp:x:5:5:UUCPadministrator:/usr/lib/uucp:
auth:x:7:21:Authenticationadministrator:/tcb/files/auth:
cron:x:9:16:Crondaemon:/usr/spool/cron:
listen:x:37:4:Networkdaemon:/usr/net/nls:
lp:x:71:18:Printeradministrator:/usr/spool/lp:
sam:x:200:50:Samsan:/usr/sam:/bin/sh
從上面的例子我們可以看到,/etc/passwd中一行記錄對應著一個使用者,每行記錄又被冒號(:)分隔為7個欄位,其格式和具體含義如下:
使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:登入Shell
“使用者名稱”是代表使用者賬號的字串。通常長度不超過8個字元,並且由大小寫字母和/或數字組成。登入名中不能有冒號(:),因為冒號在這裡是分隔符。為了相容起見,登入名中最好不要包含點字元(.),並且不使用連字元(-)和加號(+)打頭。
“口令”一些系統中,存放著加密後的使用者口令字。雖然這個欄位存放的只是使用者口令的加密串,不是明文,但是由於/etc/passwd檔案對所有使用者都可讀,所以這仍是一個安全隱患。因此,現在許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密後的使用者口令字存放到/etc/shadow檔案中,而在/etc/passwd檔案的口令欄位中只存放一個特殊的字元,例如“x”或者“*”。
“使用者標識號”是一個整數,系統內部用它來標識使用者。一般情況下它與使用者名稱是一一對應的。如果幾個使用者名稱對應的使用者標識號是一樣的,系統內部將把它們視為同一個使用者,但是它們可以有不同的口令、不同的主目錄以及不同的登入Shell等。
通常使用者標識號的取值範圍是0~65535。0是超級使用者root的標識號,1~99由系統保留,作為管理賬號,普通使用者的標識號從100開始。在Linux系統中,這個界限是500。
“組標識號”欄位記錄的是使用者所屬的使用者組。它對應著/etc/group檔案中的一條記錄。
“註釋性描述”欄位記錄著使用者的一些個人情況,例如使用者的真實姓名、電話、地址等,這個欄位並沒有什麼實際的用途。在不同的Linux系統中,這個欄位的格式並沒有統一。在許多Linux系統中,這個欄位存放的是一段任意的註釋性描述文字,用做finger命令的輸出。
“主目錄”,也就是使用者的起始工作目錄,它是使用者在登入到系統之後所處的目錄。在大多數系統中,各使用者的主目錄都被組織在同一個特定的目錄下,而使用者主目錄的名稱就是該使用者的登入名。各使用者對自己的主目錄有讀、寫、執行(搜尋)許可權,其他使用者對此目錄的訪問許可權則根據具體情況設定。
使用者登入後,要啟動一個程式,負責將使用者的操作傳給核心,這個程式是使用者登入到系統後執行的命令直譯器或某個特定的程式,即Shell。Shell是使用者與Linux系統之間的介面。Linux的Shell有許多種,每種都有不同的特點。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系統管理員可以根據系統情況和使用者習慣為使用者指定某個Shell。如果不指定Shell,那麼系統使用sh為預設的登入Shell,即這個欄位的值為/bin/sh。
使用者的登入Shell也可以指定為某個特定的程式(此程式不是一個命令直譯器)。利用這一特點,我們可以限制使用者只能執行指定的應用程式,在該應用程式執行結束後,使用者就自動退出了系統。有些Linux系統要求只有那些在系統中登記了的程式才能出現在這個欄位中。

系統中有一類使用者稱為偽使用者(psuedousers),這些使用者在Linux /etc/passwd檔案中也佔有一條記錄,但是不能登入,因為它們的登入Shell為空。它們的存在主要是方便系統管理,滿足相應的系統程式對檔案屬主的要求。常見的偽使用者如下所示。
偽使用者含義
bin擁有可執行的使用者命令檔案
sys擁有系統檔案
adm擁有帳戶檔案
uucpUUCP使用
lplp或lpd子系統使用
nobodyNFS使用
擁有帳戶檔案
除了上面列出的偽使用者外,還有許多標準的偽使用者,例如:audit,cron,mail,usenet等,它們也都各自為相關的程式和檔案所需要。
由於Linux /etc/passwd檔案是所有使用者都可讀的,如果使用者的密碼太簡單或規律比較明顯的話,一臺普通的計算機就能夠很容易地將它破解,因此對安全性要求較高的Linux系統都把加密後的口令字分離出來,單獨存放在一個檔案中,這個檔案是/etc/shadow檔案。只有超級使用者才擁有該檔案讀許可權,這就保證了使用者密碼的安全性。

相關文章