如果我輸入:
ls -l file.txt
我看到該文件的權限相當於“456”:
- 4 = 所有者 (r--)
- 5 = 組(接收)
- 6 = 其他(RW-)
有哪些權利根在這種情況下?有777嗎?
是否可以更改權限以使 root 的權限少於所有者?
答案1
我會檢查此頁出。它深入討論了文件權限。
但直接回答你的問題,不:
超級使用者「root」能夠存取系統上的任何檔案。
例如,在您的範例中,如果該文件由 say 擁有bob
,並且群組所有者也是bob
,那麼您會看到類似這樣的內容:
-r--r-xrw-. 1 bob bob 8 Jan 29 18:39 test.file
第三位組 (rw) 也適用於根,因為根是該others
組的一部分。如果您嘗試以 root 身分編輯該文件,您會發現這樣做沒有問題。
但為了進一步測試你的理論,如果該檔案由 root 擁有:
-r--r-xrw-. 1 root root 8 Jan 29 18:40 test.file
然後你再去編輯該文件,你會發現編輯它仍然沒有問題。
最後,如果你做了極端:
chmod 000 test.file
ls -lh test.file
----------. 1 root root 8 Jan 29 18:41 test.file
然後您再次編輯您將看到的文件(至少在 vi/vim 中)"test.file" [readonly]
。但您仍然可以編輯該文件並強制將其儲存為:wq!
.
使用 shell 腳本檔案測試 @Stéphane Chazelas 的聲明:
#!/bin/sh
echo "I'm alive! Thanks root!"
[root ~]# ls -lh test.sh
----------. 1 atgadmin atgadmin 31 Jan 30 10:59 test.sh
[root ~]# ./test.sh
-bash: ./test.sh: Permission denied
[root ~]# sh test.sh
I'm alive! Thanks root!
@Shadur 已經說過了,所以我只是引用而不是重述:
注意:檢查執行位元是否存在,而不是檢查它是否適用於 root。
答案2
根據設計,根用戶可以完全存取系統上的每個檔案。如果您想保護檔案免於意外刪除,您可以使用
chattr +i file
這將在 GNU/Linux 上設定不可變標誌。您可以使用-i
而不是刪除它+i
。
在 FreeBSD 上,您可以使用
chflags schg file
替代noschg
來schg
撤消它。
如果您希望防止檔案被 root 看到,您應該將檔案儲存在不同的系統上,或使用加密作為最後的手段。
答案3
是否可以更改權限以使 root 的權限少於所有者?
Shure,很簡單,只需更改 passwd 文件,使 root 的 uid 不為零即可。另一方面,不要這樣做,這是個壞主意。
您不是第一個問這個問題的人,其中一些提出了功能的想法,但我們稍後會討論這個問題,首先讓我們從了解權限系統的工作原理開始。
啟動進行存取檢查的電腦部分並不知道您的姓名,它透過號碼來識別您,該號碼稱為 uid 或使用者識別碼。以類似的方式,它不知道您所屬群組的名稱,只知道 gid。 uid 和 name 之間的對應位於 passwd 檔案中,而 gid 則映射在 groups 檔案中。
現在,當您想要開啟檔案時,會進行四項檢查:您是否有權跳過檢查,您作為使用者是否被允許這樣做,您是否作為群組成員被允許,以及您作為其他人是否被允許被允許。我在這裡跳過一些內容,例如名稱服務開關和存取控制清單以及讀寫執行,但您感興趣的部分是第一個測試。
有時您可以跳過檔案權限測試。為什麼?以及(非常重要)什麼時候?現在,有時需要完成一些您不希望任何人都做的事情,而且它們不太適合檔案權限模型。各種各樣的事情,例如在低連接埠上開啟網路連線、安裝分割區或跳過權限檢查。如今,這些東西被稱為能力。在過去,UID0 擁有所有這些,您對此無能為力,現在您可以向其他用戶提供功能,或放棄它們,但預設是舊的行為。
另一種限制 root 的方法是使用 selinux 之類的東西,但那是另一個蠟球。
答案4
在這種情況下,root 的權利是什麼?有777嗎?
是的。
如前所述,不會對 root 強制執行讀寫權限。但是,仍會檢查執行權限是否存在,因此如果未設定執行標誌,root 將無法執行該檔案。這裡的情況並非如此,因為該組有x
旗幟。
另請注意,無論是否授予寫入權限,root 或任何人都將被拒絕對儲存在唯讀檔案系統上的檔案進行寫入存取。
如果檔案儲存在遠端安裝的目錄(如 NFS)上,則根使用者的權限也可能比擁有者少。
最後,請注意,符號連結權限本質上是沒有意義的。