Systemd

systemd 動態使用者與使用者

  • April 25, 2022

要在沒有 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=

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