Permissions

root 的組權限在 /tmp 中不起作用

  • July 8, 2021

我在 /tmp 目錄中遇到了奇怪的行為。儘管屬於某個組的使用者具有讀/寫文件的權限,但他不能這樣做。

在此範例中,我創建一個新文件/tmp/test.txt為 user max。我給它 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) 編號列表。

因此,如果userXroot授予或以其他方式被授予對 的寫訪問權限/tmp/file,並且這/tmp是一個設置了粘性位的世界可寫目錄,則它們file僅在以下情況下才能打開以進行寫入:

  • userXfile;的所有者 或者
  • file目錄/tmp都歸同一個使用者所有。

在您的測試中,root對 有寫權限/tmp/test.txt,但不是文件的所有者,也不是/tmp/test.txt/tmp一個所有者(分別為maxroot)。

該問題似乎與/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_symlinksfs.protected_regular並且fs.protected_fifos預設情況下在核心程式碼中不啟用。

啟用它們是向後不兼容的更改(正如您在此評論中提供的範例所指出的那樣),並且據我所知,systemd在版本 241 中使用了這個最近的送出

致謝:感謝JdeBP指出正確的方向並對問題發表評論

引用自:https://unix.stackexchange.com/questions/503111