回答:
以下の事項はシステムのセキュリティをさまざまな点で低下させる可能性があることに注意してください。
あなたのプロセスを強制終了するスクリプトを作成します(プロセスPと呼びましょう)。その後、すべてのユーザーにsudoersでこのスクリプトを実行する許可を与えます。最後にsudoを使ってこのスクリプトの適切な呼び出しをに追加します。 /etc/bashrc
。
例として、自分のプロセスが次のものから始まっていることを知っていると仮定しましょう。 /usr/local/sbin/myproc
そして、誰かがログインしたらすぐにそれらすべてのプロセスを強制終了したいので、単純なgrep and kill戦略を使用してそれらを強制終了します。
それで、最初に以下を入れてください /usr/local/sbin/killmyprocs
:
#!/bin/sh
ps auxw|grep [m]yproc|awk '{ print $2 }'|xargs kill -TERM > /dev/null 2>&1
# end of file.
実際に作業を進めて実装するのであれば、おそらくもう少し洗練されたものにしたいでしょう。そのため、適切なシグナルをトラップし、一般的に安全な方法で処理を行うスクリプトを作成してください。
次に、すべてのユーザーにこのスクリプトを実行する権限を与えます。 /etc/sudoers
それを追加することによって:
ALL ALL = (root) NOPASSWD: /usr/local/sbin/killmyprocs
最後に、あなたのスクリプトにsudo呼び出しを追加します。 /etc/bashrc
:
[ "`id -n -u`" != "<my_username>" ] && sudo /usr/local/sbin/killmyprocs
あなた自身でログインするときあなたの「秘密の」プロセスを殺すのを避けるためにあなた自身のアカウントで置き換えてください。
要約すると、1)出力を生成しないが、強制終了しようとしているプロセスを強制終了するスクリプトを作成します。 /etc/sudoers
システム上のすべてのユーザーがそのスクリプトをrootとして実行できるようにするには、3)sudoを介してスクリプトに呼び出しを追加します /etc/bashrc
(または /etc/profile
)
注意点: /etc/bashrc
(または /etc/profile
その点については、対話型シェルのためにのみ調達されます。これは、ユーザーがssh yourhost 'ps auxw'を実行してプロセステーブルからプロセスを見つけるのが比較的簡単であることを意味します。シェル初期化ファイルが参照されないため、上記のメカニズムでは終了しません。これを回避する方法があります。 ForceCommand
ʻsshd_config`にはありますが、それは読者のための課題として残されています。
結論として、これには明らかなセキュリティ上の影響があることを再度思い出したいと思います。これはまた、あなたが完全にアクセスできないシステムをバックドアしようとしているのと非常によく似ていますが、それはここでは私の関心事ではありません(スーパーユーザーでこれらのことを尋ねなければならない場合、とにかく間に合うでしょう) 。
「プロセスはそのユーザーによって強制終了されなければならない」とはどういう意味ですか?
A)自分の所有していないプロセスをユーザーに強制終了させたいですか
プロセスを強制終了するスクリプトを作成してから、setuidを次のように設定します。 chmod u+s
(自分が何をしているのかわからない限り、これは大きなセキュリティホールになる可能性があります。)
または
B)あなたがプロセスにログインしているユーザーに気づいてそれ自身を殺して欲しいですか?
まあそれはあなたがするだろうことです。