一般來說,Linux的用戶信息保存在/etc/passwd中,組信息保存在/etc/group中,文件的每一行代表一個用戶/組。早期的Linux將密碼以名碼的形式保存在/etc/passwd中,而現(xiàn)在則多以暗碼(也就是加密之后的形式)的形式保存在/etc/shadow中。將密碼存儲在/etc/shadow中提高了密碼的安全性,因為/etc/passwd允許所有人查看,而/etc/shadow只允許root用戶查看。

進程權(quán)限:
但是,在Linux中,用戶的指令是在進程的范圍內(nèi)進行的。我們需要將用戶的權(quán)限傳遞給進程,以便進程真正去執(zhí)行操作。例如我們有一個文件a.txt, 文件中為一個字符串:Hello world!
我以用戶Vamei的身份登錄,并在shell中運行如下命令:$cat a.txt。
整個運行過程以及文件讀取如下:
我們可以看到,整個過程中我們會有兩個進程,一個是shell本身(2256),一個是shell復(fù)制自身,再運行/bin/cat (9913)。圖中的fork, exec, PID可參看Linux進程基礎(chǔ)。第二個進程總共對文件系統(tǒng)進行了兩次操作,一次是執(zhí)行(x)文件/bin/cat,另外一次是讀取(r)文件a.txt。使用$ls -l 查看這兩個文件的權(quán)限:
$ls -l /bin/cat
-rwxr-xr-x 1 root root 46764 Apr 1 2012 /bin/cat
$ls -l a.txt
-rw-rw-r-- 1 Vamei Vamei 14 Oct 7 09:14 a.txt
從上面可以看到(參考Linux文件管理背景知識),/bin/cat讓所有用戶都享有執(zhí)行的權(quán)利,而Vamei作為a.txt的擁有者,對a.txt享有讀取的權(quán)利。
讓我們進入更多的細節(jié) (The devil is in the details)。在進行這兩次操作的時候,盡管用戶Vamei擁有相應(yīng)的權(quán)限,但我們發(fā)現(xiàn),真正做工作的是進程9913。我們要讓這個進程得到相應(yīng)的權(quán)限。實際上,每個進程會維護有如下6個ID:
真實身份: real UID, real GID
有效身份:effective UID, effective GID
存儲身份:saved UID, saved GID