Systemd
systemd 動態使用者與使用者
要在沒有 root 權限的情況下執行程序,您可以在 systemd 中使用 DynamicUser= 或帶有 User= 的靜態使用者。可以在此部落格文章中找到 DynamicUser 的一個很好的解釋:http: //0pointer.net/blog/dynamic-users-with-systemd.html
雖然哪個更安全?除了 DynamicUser 使用動態使用者並且 User 需要係統使用者之外,DynamicUser 和 User 之間的確切區別是什麼?
DynamicUser
更安全,因為它意味著:
ProtectSystem=strict
: 除了 API 文件系統子樹/dev/
和./proc/``/sys/
ProtectHome=read-only
: 對於本單元呼叫的程序,目錄/home/
、/root
和/run/user
是只讀的。PrivateTmp=yes
:為執行的程序設置一個新的文件系統命名空間,並在其中掛載私有目錄/tmp/
和/var/tmp/
目錄,這些目錄不被命名空間外的程序共享。這對於保護對程序臨時文件的訪問很有用,但會使程序之間的共享通過/tmp/
或/var/tmp/
不可能。如果啟用此選項,則服務停止後將刪除這些目錄中的服務創建的所有臨時文件。RemoveIPC=yes
: 使用者擁有的所有 System V 和 POSIX IPC 對象和該單元的程序組在該單元停止時被刪除您可以通過在使用時明確設置來模仿這些設置
User=
,從而有效地獲得相同的保護。一種
DynamicUser=
更好的方法是在創建服務實例時。假設你有foo.socket
哪些用途Accept=yes
。在這種情況下,每次有人連接到您的套接字時,foo@%i.service
都會產生一個新的。DynamicUser=
每個實例都有自己的命名空間和目錄,如果使用的/tmp
話,它們會被共享User=
。