systemdでのユーザーとグループの分離

systemdサービスでUser=、Group=、DynamicUser=、SupplementaryGroups=を設定します。専用サービスユーザーの作成方法とサービス間の分離方法について学びます。

Operational Guides

詳細な説明

非rootユーザーでサービスを実行する

rootでサービスを実行することはセキュリティリスクです。systemdは最小限の権限で専用ユーザーとしてサービスを実行することを容易にします。

基本的なユーザー/グループ設定

[Service]
User=myapp
Group=myapp

ユーザーとグループはシステム上に存在する必要があります:

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp

DynamicUser — 一時的なユーザー

DynamicUser=yesはサービスが実行中の間だけ存在する一時的なユーザーを作成します:

[Service]
DynamicUser=yes
StateDirectory=myapp
CacheDirectory=myapp

systemd管理ディレクトリ

ディレクティブ 作成先 典型的な用途
StateDirectory= /var/lib/{name}/ 永続データ
CacheDirectory= /var/cache/{name}/ キャッシュデータ
LogsDirectory= /var/log/{name}/ ログファイル
RuntimeDirectory= /run/{name}/ ソケット、PIDファイル

ユースケース

同じサーバー上の複数のサービスに適切なプロセス分離を設定し、各サービスが専用ユーザーとして自身のデータディレクトリと必要なシステムリソースにのみアクセスできるようにする場合に使用します。

試してみる — Systemd Unit File Generator

フルツールを開く