閱<unix高級環境編程>過程中,
高頻出現:實際用戶ID/有效用戶ID/保存的設置用戶ID(saved set-user-ID),看着很亂,摘不清楚.
因爲Linux是多用戶多任務系統,
所以一個文件可能同時被許多人使用,
自然的,我們一定要設好每個文件的權限.
從文件的角度,看用戶/組的權限.
linux對文件的描述
常規文件,可以按下表進行理解.(/dev目錄下的文件除外)
文件屬性(佔10個字符空間) | 文件數 | 擁有者 | 所屬的group | 文件大小 | 建檔日期 | 文件名 |
---|---|---|---|---|---|---|
drwx------ | 2 | Guest | users | 1024 | Nov 21 21:05 | |
-rwx–x--x | 1 | root | root | 89080 | Nov 7 22:41 | tar* |
-rwxr-xr-x | 1 | root | bin | 5013 | Aug 15 9:32 | uname* |
lrwxrwxrwx | 1 | root | root | 4 | Nov 24 19:30 | zcat->gzip |
-rwxr-xr-x | 1 | root | bin | 308364 | Nov 29 7:43 | zsh* |
-rwsr-x— | 1 | root | bin | 9853 | Aug 15 5:46 | su* |
這些顯示內容的意義:
第一個欄位,表示文件的屬性。Linux的文件基本上分爲三個屬性:可讀(r),可寫(w),可執行(x)。但是這裏有十個格子可以添(具體程序實現時,實際上是十個bit位)。
第一個小格是特殊表示格,表示目錄或連結文件等等。
- -:普通文件(f)
- d:目錄文件
- b:塊設備文件(block)
- c:字符設備文件(character)
- l:符號鏈接文件(symbolic link file)
- p:命令管道文件(pipe)
- s:套接字文件(socket)
詳細可參考,fstat()函數手冊.
其餘剩下的格子就以每3格爲一個單位。因爲Linux是多用戶多任務系統,所以一個文件可能同時被許多人使用,所以我們一定要設好每個文件的權限,
其文件的權限位置排列順序是(以-rwxr-xr-x爲例):
rwx(Owner)r-x(Group)r-x(Other)
這個例子表示的權限是:使用者自己可讀,可寫,可執行;同一組的用戶可讀,不可寫,可執行;其它用戶可讀,不可寫,可執行。
另外,有一些程序屬性的執行部分不是x,而是s,這表示執行這個程序的使用者,臨時可以有和擁有者一樣權力的身份來執行該程序。一般出現在系統管理之類的指令或程序,讓使用者執行時,擁有root身份。
第二個欄位,表示文件個數。如果是文件的話,那這個數目自然是1了,如果是目錄的話,那它的數目就是該目錄中的文件個數了。
第三個欄位,表示該文件或目錄的擁有者。
第四個欄位,表示所屬的組(group)。每一個使用者都可以擁有一個以上的組,不過大部分的使用者應該都只屬於一個組,只有當系統管理員希望給予某使用者特殊權限時,纔可能會給他另一個組.
第五欄位,表示文件大小。文件大小用byte來表示,而空目錄一般都是1024byte,你當然可以用其它參數使文件顯示的單位不同,如使用ls –k就是用kb萊顯示一個文件的大小單位,不過一般我們還是以byte爲主。
第六個欄位,表示創建日期。以“月,日,時間”的格式表示,如Aug 15 5:46表示8月15日早上5:46分。
第七個欄位,表示文件名。我們可以用ls –a顯示隱藏的文件名。
從用戶/組的角度,看文件的權限.
實際用戶ID/有效用戶ID/保存的設置用戶ID(saved set-user-ID)
實際用戶ID:
標識我們實際上是誰,是當前登錄的用戶ID.
有效用戶ID:
決定的是文件的訪問權.
通常有效用戶ID就是實際用戶ID.
設置-用戶-ID,
是一個特殊標誌,當該標誌設置時,執行該文件時的有效用戶ID就是文件的所有者ID.
比如,當一個文件的所有者是root.當你以另一個用戶登錄時,
如果沒有設置-用戶-ID,執行該文件時的有效ID和實際ID就是登錄用戶的ID,
但如果設置了設置-用戶-ID,實際用戶ID是登錄用戶ID,而有效用戶ID是root用戶的ID.
實例對應:
登錄某個賬戶,以某個賬戶的身份,操作各種文件,要麼能操作,要麼不能操作,
不能操作的原因,基本上是權限不足.
如上圖,當前登錄的賬戶guo(實際用戶ID),包含一個.viminfo文件,該文件被root賬戶創建,屬於root組.
擁有者(root)具備讀寫權限,組用戶以及其他用戶不具備任何操作權限.
此時,賬戶guo,無法對該文件進行任何操作(如下圖,權限不足),
權限不足的判據:當前的有效用戶ID(guo),不具備訪問該文件的權限
如果一定要對該文件進行操作,可以暫時提升賬戶guo的權限,
sudo+動作,動作過程中,暫時性的修改了有效用戶ID爲root,從而具備了cp動作的權限.動作執行完畢後,恢復有效用戶ID爲guo.