로그아웃 시 사용자 프로세스 종료

로그아웃 시 사용자 프로세스 종료

사용자의 원격 X 세션을 처리하는 Ubuntu 서버가 있습니다. 그러나 저는 사용자가 어떤 종류의 백그라운드 프로세스도 실행하는 것을 허용하고 싶지 않습니다. 따라서 제 질문은 다음과 같습니다.

사용자가 백그라운드 프로세스를 갖지 못하게 하려면 어떻게 해야 합니까? 아니면 로그인하지 않은 사용자의 프로세스를 쉽게 종료할 수 있는 방법이 있습니까?

답변1

내 서버에서도 비슷한 작업을 수행했습니다. 전반적인 내용은 이렇습니다

/etc/pam.d/login1) 프로젝트 하단에 추가합니다 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{}

아이디어이긴 하지만 좀 더 다듬어져야 할 것 같습니다.

관련 정보