Уничтожать пользовательские процессы при выходе из системы

Уничтожать пользовательские процессы при выходе из системы

У меня есть сервер 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{}

Это идея, но я думаю, что она нуждается в дальнейшей доработке.

Связанный контент