root
すべてのユーザーが実行しているすべてのプログラムを終了できます。ユーザーがsudo
背中を使用せずに他のユーザーのプログラムを殺すことはできますか?
例:ユーザーに実行しているプログラムを終了させる方法はfoo
?x
bar
答え1
これはから来たものですkill(2)
マンページ:
プロセスがシグナルを送信する権限を持つには、許可が必要です(LinuxではCAP_KILL機能が必要です)。あるいは、転送プロセスの実際のまたは有効なユーザーIDは、宛先の実際のまたは保存されたセットのユーザーIDと同じでなければなりません。プロセス。 SIGCONTの場合、送信プロセスと受信プロセスが同じセッションに属していれば十分です。
したがって、本質的に一般的な状況では、rootではない場合(およびsetuid
rootになるためにsudoまたはプログラムを使用できない場合)、他のユーザーのプロセスを終了することはできません。
答え2
ルートとバーは、barが所有するプロセスのみを終了できます。 sudo/setuid プログラムは、foo の権限をルートの権限に変更します。
答え3
ザイルズの返信を見るbashがSIGTERMを無視するのはなぜですか?
まず第一に、これはbashに限定されません。 ATT ksh、dash、zsh は同じ方法で動作します。コマンドライン編集中にSIGTERMとSIGQUITを無視します。 mkshの場合は終了しませんが、SIGINTとして扱われます。
ksh マニュアルと bash マニュアルはどちらも、次の用語で SIGTERM を無視することを正当化します。
so that kill 0 does not kill an interactive shell
Kill 0 は、シェルが配置されているプロセスグループ内のすべてのプロセスを終了します。簡単に言うと、プロセスグループは、端末のフォアグラウンドで実行されているか、バックグラウンドでジョブがあるか、保留中のすべてのプロセスで構成されます。