ユーザーレベルのシステムサービスが実行されています。~/.config/systemd/user/
しかし、このサービスの予約ポリシーを独立した方法で変更したいと思います。つまり、起動時に設定し、CLIで手動で何も実行したくありません。
しかし、以下にこの2つの方向を追加すると、[Serivice]
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=99
しかし、この問題が発生します。
hyegar.service: Control process exited, code=exited, status=214/SETSCHEDULER
答え1
これらの設定を使用するには、CPUSchedulingPolicy
ルートまたはこの機能が必要ですCAP_SYS_NICE
。残念ながら、すべてのLinuxディストリビューションが機能メカニズムを実装しているわけではなく、詳細に文書化するわけではありません。
ユーザーレベルのサービスは明らかに自分自身の機能を指定できません。これは、正しい機能を要求するだけで、すべてのユーザーがrootになることを効果的に許可するためです。
ユーザーレベルのシステムサービスの「親」は、名前が自動的に作成されたシステムレベルのサービスですuser@<your-UID>.service
。いくつかの実験の最後に、実際に/etc/systemd/system/user@<your-UID>.service.d/override.conf
次の内容を含むファイルを作成できることがわかりました。
[Service]
AmbientCapabilities=CAP_SYS_NICE
次に、を実行してsystemctl daemon-reload
ログオフしてから再起動するか、別のユーザーとしてログインして、以前のセッションがシステムuser@<your-UID>.service
でアクティブになっていないことを確認します。自分で再度ログインすると、ユーザーレベルのサービスですべてのユーザーアカウントCAP_SYS_NICE
に使用できる機能があります。
たとえば、私のUIDは1000なので、私が作成するファイルに名前が付けられ、私のセッションにそのPIDが含まれていて、それを使用して機能状態を照会します。/etc/systemd/system/[email protected]/override.conf
gvfs-daemon.service
/sbin/getpcaps
$ systemctl --user status gvfs-daemon
● gvfs-daemon.service - Virtual filesystem service
Loaded: loaded (/usr/lib/systemd/user/gvfs-daemon.service; static; vendor preset: enabled)
Active: active (running) since Fri 2020-05-29 11:07:28 EEST; 50s ago
Main PID: 11467 (gvfsd)
CGroup: /user.slice/user-1000.slice/[email protected]/gvfs-daemon.service
└─11467 /usr/lib/gvfs/gvfsd
[...]
$ /sbin/getpcaps 11467
Capabilities for `11467': = cap_sys_nice+eip
したがって、有効、継承可能、および許可機能を使用できるようになりました。このテストはDebian 10で行われました。
ユーザーレベルのサービスで必要な機能が利用可能になると、そのオプションの使用をsystemd
積極的にブロックしない限り、ユーザーレベルのサービスのオプションを使用できます。CPUSchedulingPolicy
CPUSchedulingPolicy
Debianベースのディストリビューションでは、AmbientCapabilities
すべてのユーザーのサービスがこれらの機能を使用できるようにroot権限を追加できます。/lib/systemd/system/[email protected]
CAP_SYS_NICE
ただし、この機能を使用すると、プロセスの変更を可能にする良い値とスケジュール戦略があることに注意する必要があります。システムのすべてのプロセス。これは、サービス拒否攻撃または特権プロセスが可能なすべての競合状態を容易に倒すことを可能にする方法として悪意を持って使用される可能性があり、既にroot権限ではなくアクセス権を持つ攻撃者がroot権限を取得しやすくなります。したがって、信頼できるユーザーにのみこの機能を提供したいと思います。