有沒有辦法用 systemd 控製文件系統訪問?
因此,我正在深入研究 systemd 的複雜性,以及它使用 cpu、io 和記憶體等 cgroup 來計量資源的能力。
還有一種方法可以控制程序可以使用 systemd 訪問的目錄嗎?例如,
/usr/bin
通常標記為o+rX
,我希望將網路伺服器程序鎖定在該目錄之外。已經有很多軟體漏洞,您可以從磁碟讀取任意文件,這將增強分層的安全性方法。我確信這可以通過一些非常花哨的文件系統權限來完成,但想知道是否有更好的方法。感謝伺服器故障!
實際上,您有許多選項,您可以在單元文件中為您的服務定義這些選項。它們都以相同的原理工作,通過在為服務設置的命名空間 systemd 中使用綁定掛載。文件系統的某些部分要麼以只讀方式掛載,要麼通過掛載空目錄呈現為完全不可見/不可訪問。
PrivateTmp
可以說是最常見的。啟用
PrivateTmp
為已執行的程序設置一個新的文件系統命名空間,並在其中掛載私有目錄/tmp
和/var/tmp
目錄,這些目錄不被命名空間外的程序共享。如果,則為本單元呼叫的程序以只讀方式**
true
掛載/usr
和目錄。 如果設置為,則該目錄也以只讀方式掛載。如果設置為“strict”,則整個文件系統層次結構以只讀方式掛載,API 文件系統子樹 /dev、/proc 和 /sys 除外/boot
full
**/etc
接受布爾參數或“只讀”。如果,
true
目錄和被本單元呼叫的程序設為不可訪問且為空。如果設置為“ ”,則三個目錄改為只讀/home``/root``/run/user``read-only
如果為真,核心變數可通過
/proc/sys
,/sys
,/proc/sysrq-trigger
,/proc/latency_stats
,/proc/acpi
,和訪問/proc/timer_stats
,並將設為只讀。/proc/fs``/proc/irq
列出的路徑
ReadOnlyPaths=
只能以只讀方式訪問,即使通常的文件訪問控制允許這樣做,也會拒絕寫入。
InaccessiblePaths
InaccessiblePaths=
命名空間內的程序(以及文件系統層次結構中它們下面的所有內容)將無法訪問其中 列出的路徑。不過可能還有更多選擇。
更分層的訪問策略可能需要 SELinux,並且您可能需要對它有非常透徹的了解,並且您可能需要熟練使用多級安全策略。