ユーザーファイルで.bashrc
いくつかのプロセス(ウィンドウベース)を起動しました。ユーザーがこれらのプロセスを終了しないようにしたいと思います。一般ユーザーがプロセスを終了できないようにプロセスをスーパーユーザーに送信する方法はありますか?それとも、スーパーユーザーが所有するいくつかのプロセスを開始する方法はありますか?
これは、ユーザーが1つのウィンドウのみを開いたままにする高度に制御された環境です。私はUbuntu 12.04を使用しており、他の多くの機能を無効にしました。実行障害ではありません。しかし、私はただ知りたいです。
答え1
他のユーザーによるコマンドの開始は、通常、su、sudo を使用するか、実行可能ファイル権限で setuid ビットを設定することによって実行されます。
あなたはそうですいいえそのユーザーにすべての権限があるので、必ずしも必要でない限り、rootとして実行可能ファイルを実行しようとしています。これらのプロセスに権限が必要ない場合は、できるだけ少ない権限を付与したいユーザーである「nobody」で実行することができます。
ユーザーは常に自分のプロセスを終了する権限を持っています(killシステムコールにアクセスできる限り)。つまり、有効な uid が提供されたプロセスは、常にそのプロセスとして実行されているプロセスにシグナルを送信する権限があります。プロセス。同じ有効なuidです。
答え2
正常なシャットダウン(SIGINT)を防ぐために、プロセスにトラップを構築できます。もちろん、これはSIGKILL(-9)では機能しません。これらのトラップは次のとおりです(bash)。
trap "echo trapped" INT
トラップをリセットするには、次のものを使用できます。
trap - INT
答え3
正確に何をしているかによって異なりますが、オプションは次のとおりです。
- ユーザーは他のユーザーとしてプログラムを実行できます。実行可能ファイルからsudoまたはsetuidを介してこれを実行できます。これらのいずれかを使用すると、ユーザーの.bashrc以外のものがプログラムを起動できることに注意してください。 (注:sudoとsetuidはどちらもroot以外のユーザーであり、可能であればそうする必要があります)
- ログインシステムにプロセスを呼び出すようにします(root)。今後実際にユーザーログインが完了しました。ここでの利点は、ユーザーに権限を与えずにユーザーがそれをバイパスすることができないことです(たとえば、.bashrcの編集または削除、シェルの切り替えなど)。 1つの方法はPAMに接続するようです
pam_exec
。可能であれば、実行可能ファイルはroot権限を放棄する必要があります。