動かざることバグの如し

近づきたいよ 君の理想に

ExecStartPreではrootで実行したい場合はPrefix使え

環境

  • systemd 255

やりたいこと

例えば、User=www-data で設定して起動してるSystemdのサービスがあったとする。 ただしソケットファイルの削除やログファイルなど、では=ではroot権限で何か準備して、ExecStart= では www-data で実行したい。

昔は

昔は PermissionsStartOnly=true をつけると動いていたが最近のSystemdでは動作しない。どうやら非推奨になって削除されたっぽい。

現在では

プレフィックスとして + をコマンドの先頭に付与する。

ExecStart=+/path/to/command
ExecStart=/main/command

のような感じ。

昔の記事だとPrefix!と!!も使えたらしいが現在では削除されているので + のみ覚えれば良い。

時系列でまとめると以下

バージョン できごと 詳細
systemd 231 2016 実行可能Prefix+の追加 ExecStart=+のように+を付けることで、User=やGroup=の設定を無視して完全な権限でコマンドを実行できる機能が導入された
systemd 235 2017 Prefix!と!!の追加 さらに追加のPrefixが導入された
systemd 240 2018 PermissionsStartOnlyの非推奨化 PermissionsStartOnlyが非推奨(deprecated)となり、代替として実行可能Prefix+の使用が推奨されるようになった
systemd 245 2020 Prefix+の挙動修正 +Prefixを付けたコマンドでは、PrivateTmp=yesの設定が無効になり、/tmpディレクトリへのアクセスが許可されるように挙動が明確化された
systemd 258 2021 Prefix!と!!の削除 以前追加された!と!!のPrefixは削除され、現在は+などが主に使われている

参考リンク