root 的組權限在 /tmp 中不起作用
我在 /tmp 目錄中遇到了奇怪的行為。儘管屬於某個組的使用者具有讀/寫文件的權限,但他不能這樣做。
在此範例中,我創建一個新文件
/tmp/test.txt
為 usermax
。我給它 777 權限並使文件屬於該組root
,但使用者root
仍然無法編輯它。su max touch /tmp/test.txt chmod 777 /tmp/test.txt su root chown max:root /tmp/test.txt # ls -l /tmp/test.txt -rwxrwxrwx 1 max root 0 26. Feb 12:08 test.txt # echo "foobar" > /tmp/test.txt bash: /tmp/test.txt: Permission denied
當移動
test.txt
到不同的目錄時,一切都按預期工作。
/tmp
是通過以下選項通過 fstab 安裝的 tmpfs:tmpfs /tmp tmpfs nodev,nosuid,size=5G 0 0
執行
ls -l /
時,tmp 文件夾如下所示:drwxrwxrwt 20 root root 640 26. Feb 12:01 tmp/
我正在執行 Manjaro,一個 Arch Linux 衍生產品。
我在安裝 tmpfs 時做錯了嗎?
您顯示的行為似乎取決於此送出
fs.protected_regular
(我相信在 4.19 版中收斂)引入的 Linux 核心參數,fs.protected_fifos
旨在修復安全漏洞。送出消息的摘錄(強調我的):
namei:允許 FIFO 和正常文件的受限 O_CREAT
禁止在全域可寫粘性目錄中打開不屬於使用者的 FIFO 或正常文件,除非所有者與目錄的所有者相同,或者文件在沒有 O_CREAT 標誌的情況下打開。目的是使數據欺騙攻擊更加困難。…
相同的送出消息還報告了相關的常見漏洞和暴露 (CVE) 編號列表。
因此,如果
userX
被root
授予或以其他方式被授予對 的寫訪問權限/tmp/file
,並且這/tmp
是一個設置了粘性位的世界可寫目錄,則它們file
僅在以下情況下才能打開以進行寫入:
userX
是file
;的所有者 或者- 和
file
目錄/tmp
都歸同一個使用者所有。在您的測試中,
root
對 有寫權限/tmp/test.txt
,但不是文件的所有者,也不是/tmp/test.txt
同/tmp
一個所有者(分別為max
和root
)。該問題似乎與
/tmp
安裝方式完全無關。相關文件位於Documentation/sysctl/fs.txt:
protected_fifos:
這種保護的目的是避免無意寫入攻擊者控制的 FIFO,程序預期會在其中創建正常文件。
…
受保護的正常:
這種保護類似於protected_fifos,但它避免了寫入攻擊者控制的正常文件,程序預計會在其中創建一個文件。
當設置為“0”時,寫入正常文件不受限制。
當設置為“1”時,不允許 O_CREAT 在世界可寫粘性目錄中我們不擁有的正常文件上打開,除非它們歸目錄所有者所有。
當設置為“2”時,它也適用於組可寫粘性目錄。
也就是說,可以使用以下命令禁用上述保護:
sysctl fs.protected_regular=0
一些測試來支持我們的假設:
$ su - root # sysctl fs.protected_regular fs.protected_regular = 1 # cd / # mkdir test # chmod 1777 test # su - otheruser $ echo hello >/test/somefile $ exit logout # cat /test/somefile hello # ls -lah test/somefile -rw-r--r-- 1 otheruser otheruser 6 Feb 26 17:21 test/somefile # echo root >>test/somefile -bash: test/somefile: Permission denied # sysctl fs.protected_regular=0 fs.protected_regular = 0 # echo root >>test/somefile # cat /test/somefile hello root # sysctl fs.protected_regular=1 fs.protected_regular = 1 # echo root >>test/somefile -bash: test/somefile: Permission denied # chmod 0777 /test/ # echo root >>test/somefile # cat test/somefile hello root root
與
fs.protected_hardlinks
和不同fs.protected_symlinks
,fs.protected_regular
並且fs.protected_fifos
預設情況下在核心程式碼中不啟用。啟用它們是向後不兼容的更改(正如您在此評論中提供的範例所指出的那樣),並且據我所知,
systemd
在版本 241 中使用了這個最近的送出。