与えられたユーザーのすべてのプロセスを誰でも殺せるようにする


15

共有サーバーでは、他のユーザー(ルート権限も持たない)がリソースを必要とする場合に、優先度の低いユーザーのプロセスを強制終了できるように、非常に優先度の低いユーザーが必要です。

そのようなものを許可することは可能ですか?


1
sudo -uユーザーに、おそらくグループ内で必要なすべてのユーザーにキル権を与えます
-Kiwy

4
これらの優先度の低いユーザーが実際の人間のユーザーであり、あなたとあなたの仲間が純血BOFHであることを本当に願っています。これにより、質問がより興味深いものになります。
パイプ

@DavidFoersterは、1つの問題は、CPUが100%でない場合であっても、低優先プロセスがプロセッサを埋めることができるということですキャッシュなど同様にディスクアクセスなどを持つ
イアン・Ringrose

回答:


24

他のユーザーに、優先度の低いユーザーとしてプロセスを強制終了する許可を与えます。

sudo -u lowpriouser /bin/kill PID

ユーザーは、root権限がない限り、自分のプロセスのみにシグナルを送ることができます。でsudo -u正しい設定のユーザーを使用してsudoersファイルに、優先度の低いユーザーの身元を推測してプロセスを強制終了する場合があります。

例えば:

%killers ALL = (lowpriouser) /bin/kill

これにより、グループ内のすべてのユーザーが次のユーザーとしてkillers実行でき/bin/killます。lowpriouser

sudoersシステムのマニュアルも参照してください。


OpenBSDシステムではdoas、次のような構成のネイティブユーティリティを使用して同じことができます。

permit :killers as lowpriouser cmd /bin/kill

それから

doas -u lowpriouser /bin/kill PID

doasおよびのマニュアルを参照してくださいdoas.conf


killコマンドを許可するとそれを悪用して任意のプロセスへの終了とは無関係のシグナルを送信する可能性があり、これはセキュリティ上の問題になる可能性があります。
フォレスト

@forestこのため、rootアカウントを使用して実行する機能を全員に提供することはお勧めしませんkill。またkillers、すべてのユーザーではなく、ユーザーグループ()を使用することをお勧めします。
クサラナナンダ

しかし、私が意味するのは、それkill -HUPだけではなく、そのグループが送信できるようにするということkill -TERMです。
フォレスト

@forestはい。が所有するプロセスにシグナルを送信できますlowpriouser。信号をに制限する場合はTERM、ラッパーシェルスクリプトを記述し、/bin/kill人々がの代わりにそれを使用できるようにします/bin/kill
クサラナナンダ

1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
フォレスト

5

優先順位が低い場合、リソースをほとんど消費しないため、プロセスを強制終了しないでください。

実際に優先度を低くするには、優先度を手動で変更するか、次のようなデーモンを使用します autonice何年も前(1994年)にDEC OSF / 1用に書いた。 。

編集にはand、現代のユニックスにこの機能を提供するというパッケージがあります。


1つの問題は、CPUが100%の低優先度のプロセスではない場合でもなどのディスクアクセスと同様にキャッシュなどのプロセッサを埋めることができるということです
イアンRingrose

@IanRingroseは、実行がスケジュールされているタスクのみがキャッシュを占有したり、ディスクアクセスを実行したりできます。
-Alnitak

4

あなたは間違った角度から問題にアプローチしていると思います:プロセスが低優先度設定(CPU、I / O)で実行されている場合、実行するようにスケジュールされないため、他のプロセスに大きな影響はありません。メモリ使用量に関しては、メインメモリが不足していて、プロセスが長時間実行されるようにスケジュールされていなかった場合(たとえば、CPUおよびI / Oの制約のため)、その「クリーン」ページはドロップされ、「ダーティ」ページがコミットされますまたは交換して、他のプロセスのパフォーマンスに影響を与えなくなりました。

結論:適切な優先度設定と十分なスワップスペースにより、より重要なタスクのための「余地」を作るために低優先度のジョブを殺す必要はないはずです。代わりに、カーネルは前者をスリープ状態にし、後者を優先するように注意します。


1
「低優先度」は、「CPU優先度を下げて実行する」という意味を暗示することなく、「重要ではない」ことも意味します。ただし、これは質問では明示されていません。
クサラナナンダ

@Kusalananda:これは質問で明示されていないことに同意しますが、私の答えはそれが現実にあるべきだと述べています。
デビッドフォースター

1
しかし、それほど単純ではありません。特にメモリに制約がある場合、優先順位の低いプロセスでさえシステムを停止させる可能性があります。それらの設定方法に応じて、プロセスをスワップします。スワップによりI / O(プロセスのI / Oクォータに含まれない場合があります)が発生し、システムの応答性が大幅に低下します。それから、おそらく一般的には(他の人はリソースを必要としないが)、低優先度のプロセスが必要なすべてのリソースを実際に取得することもできます(通常のメモリ制限は適用できません)。CPUシェアはここで役立ちます。
ジョナスシェーファー

@JonasWielicki、完全なプロセスを交換する古い「unixの方法」には利点がありました。私が正しく思い出すと、HPUXは1990年代にこの問題を解決するためのいくつかのツールを使用できます。
イアンリングローズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.