ユーザーからのリモート 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{}
それはアイデアですが、さらに改良する必要があると思います。