ログアウト時にユーザープロセスを強制終了する

ログアウト時にユーザープロセスを強制終了する

ユーザーからのリモート X セッションを処理する Ubuntu サーバーがあります。ただし、ユーザーにバックグラウンド プロセスの実行を許可したくないので、質問があります。

ユーザーがバックグラウンド プロセスを実行できないようにするにはどうすればよいですか? また、ログインしていないユーザーのプロセスを終了する簡単な方法はありますか?

答え1

私もサーバーで同じようなことをしています。大まかな概要はこうです

1)項目/etc/pam.d/loginの下部に追加しますsession:

session optional pam_exec.so quiet /etc/pam_session.sh

2) 次に、/etc/pam_session.sh(およびchmod +x)を作成します。

#!/bin/bash
[[ "$PAM_USER" == "root" ]] && exit 0

SESSION_COUNT="$(w -h "$PAM_USER" | wc -l)"

if (( SESSION_COUNT == 0 )) && [[ "$PAM_TYPE" == "close_session" ]]; then
  pkill -u "$PAM_USER"
fi

必要に応じて、sleep 5; pkill -9 -u "$PAM_USER"の後に のようなものを追加してpkill、本当にデッドであることを確認することもできます。

これはログイン シェルが終了したときにのみ呼び出されるため、自動化されたシステム アクティビティには影響しません。ただし、さらに安全性を高めたい場合は、UID が 1000 より大きいかどうかなどのチェックを追加できます。

答え2

次のコマンドを使用して、システムにログインしているユーザーを見つけて、そのユーザーを強制終了することができます。

$ who | awk '{ printf ("%s",$1 "\n"); }' | \
        grep -v root | xargs -I {} -t pkill -u $1{}

ただし、いつ実行するかを制御する必要があるかもしれません。

$ ps -eaf | egrep -q [g]nome-session || who | \
            awk '{ printf ("%s",$1 "\n"); }' | \
            grep -v root | xargs -I {} -t pkill -u $1{}

それはアイデアですが、さらに改良する必要があると思います。

関連情報