Linuxユーザーシステムファイルの予約ポリシーを変更するには?

Linuxユーザーシステムファイルの予約ポリシーを変更するには?

ユーザーレベルのシステムサービスが実行されています。~/.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.confgvfs-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積極的にブロックしない限り、ユーザーレベルのサービスのオプションを使用できます。CPUSchedulingPolicyCPUSchedulingPolicy

Debianベースのディストリビューションでは、AmbientCapabilitiesすべてのユーザーのサービスがこれらの機能を使用できるようにroot権限を追加できます。/lib/systemd/system/[email protected]

CAP_SYS_NICEただし、この機能を使用すると、プロセスの変更を可能にする良い値とスケジュール戦略があることに注意する必要があります。システムのすべてのプロセス。これは、サービス拒否攻撃または特権プロセスが可能なすべての競合状態を容易に倒すことを可能にする方法として悪意を持って使用される可能性があり、既にroot権限ではなくアクセス権を持つ攻撃者がroot権限を取得しやすくなります。したがって、信頼できるユーザーにのみこの機能を提供したいと思います。

おすすめ記事