У меня есть сервер Ubuntu, который обрабатывает удаленные сеансы X от пользователей. Однако я не хочу позволять пользователям запускать какие-либо фоновые процессы — поэтому вот мой вопрос:
Как запретить пользователям запускать какие-либо фоновые процессы или есть ли простой способ завершить процессы пользователей, которые не вошли в систему?
решение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{}
Это идея, но я думаю, что она нуждается в дальнейшей доработке.