進程pid和ppid、進程的uid和euid、使用者的uid和gid、檔案的建立者和所有者的關係辨析
1、當我們建立使用者時,由我們為建立使用者命名和設定密碼,同時系統會為我們所建立的使用者名稱關聯一個號,就是所謂的使用者uid。同時我們還可以把這個使用者放到某個使用者群裡,類似的,使用者群也可以我們手工建立。如果建立使用者時,不指明所建的使用者屬於哪個使用者群,則系統會自動建立一個跟使用者名稱同名的使用者群。不管手工建立還是自動建立,系統都會為使用者群關聯一個號,這個號稱之為gid。使用者uid所屬的群的gid就是使用者的gid。
2、系統在運行每個進程時都會關聯幾個號,分別為pid、ppid、uid、euid。進程的pid為運行進程時,系統自動分配的,用於唯一標識此進程的一個整數。進程的ppid就是進程的父進程的pid。同時,系統還會為啟動並執行進程分配一個進程uid和進程euid,用於判斷檔案的執行許可權。一般情況下,進程uid和進程euid等於運行這個進程的使用者uid。對於某檔案,它的執行許可權分成檔案擁有者、檔案擁有者同組、其他使用者三組,從而分成三個層級。使用者euid的作用就是於此。通過比較euid是屬於檔案的哪個組,從而決定屬於檔案執行許可權的哪個層級,那麼這個進程就擁有對該檔案什麼層級的執行許可權。另外,如果可執行檔的setuid位有效,則運行這個可執行檔時,進程uid還是使用者的uid,而進程euid則會暫時被修改成該可執行檔的所有者使用者uid,直到該進程結束。一句話,在某個進程中,進程pid和ppid是唯一標識該進程的,它不會改變,而進程uid與運行該進程的使用者uid相同,進程euid則與uid相同,只有回合設定了setuid位的檔案時才會把euid改為這個檔案的所有者使用者uid。進程gid和進程egid則類似。
檔案的屬性:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
檔案類型 setuid setgid sticky R W X R W X R W X
#define __S_IFMT 0170000 0開頭表示是八進位,這個位決定了檔案類型
#define __S_IFDIR 0040000 目錄檔案
#define __S_IFCHR 0020000 字元裝置檔案
。。。。。。。
#define S_IRUSR 檔案的所有者可讀
#define S_IWUSR 檔案的所有者可寫
#define S_IXUSR 檔案的所有者可執行
#define S_IRGRP 檔案的所有者的同組使用者可讀
#define S_IROTH 檔案的其他使用者可讀
在shell中執行ls -l命令,則會顯示如下:
drwxr-xr-x 2 root root 652 Jul 31 2006 /root/hello
d表示檔案,後面幾個表示檔案所有者、同組使用者、其他使用者的執行許可權,檔案數量,檔案所有者,檔案建立者(注意,RHEL這項是檔案所有群),檔案大小,日期,檔案所在路徑
du -sh xxx可以測量xxx檔案或目錄所佔記憶體大小。