Devices

為什麼 SELinux 文件系統有它自己的空設備?

  • July 11, 2014

通過查看/sys/fs/selinux,我發現了這個:

# ls -l /sys/fs/selinux/null
crw-rw-rw-. 1 root root 1, 3 Jan 24 02:47 /sys/fs/selinux/null

這等同於/dev/null

# ls -l /dev/null
crw-rw-rw-. 1 root root 1, 3 Jan 24 10:47 /dev/null

那麼 SELinux 擁有自己的空設備有什麼意義呢?

這在將SELinux 實現為 Linux 安全模組中幾乎沒有解釋

這會產生一個填充的 selinuxfs 文件系統,並設置 SELinux 在上下文更改執行時關閉未經授權的文件時使用的特殊空設備節點。

顯然程序不能/dev/null在 SELinux 環境中直接使用,它們需要自己的版本。這以前稱為open_devnull,它的開始提供了一些關於為什麼需要它的更多細節:

這個針對 2.6.6-rc3 的更新檔更改了 SELinux 模組以嘗試重置它在 exec 上關閉的任何描述符(由於新域對繼承的打開文件沒有權限)以引用空設備。這解決了 SELinux 導致程序錯誤行為的問題,特別是由於在不允許新域訪問呼叫者的 tty 時關閉了描述符 0-2。這主要是為了解決呼叫者在新域方面受信任的情況,因為不受信任的呼叫者情況已經通過 AT_SECURE 和 glibc 安全模式處理。

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