사용자가 루트로 로그인한 후 프로세스를 시작합니다.

사용자가 루트로 로그인한 후 프로세스를 시작합니다.

모든 사용자 로그인에서 루트로 프로세스를 시작하고 싶습니다. 이 외에도 동기는 프로세스가 특정 사용자 폴더의 암호화된 홈 폴더에서 실행된다는 것입니다.

이 목표를 어떻게 달성할 수 있나요?

답변1

시스템에서 다음을 사용하는 경우폴리아크릴아미드(대부분) 당신은 사용할 수 있습니다pam_exec스택의 모듈 session. 명령이 완료될 때까지 사용자는 로그인되지 않습니다. 백그라운드에서 무언가를 실행하려면 이를 분기하십시오. 일부환경 변수세션에 대한 정보를 제공합니다. 예를 들어:

session optional pam_exec.so seteuid /usr/local/sbin/my-login-process

다음 /usr/local/sbin/my-login-process과 같은 내용이 포함되어 있습니다.

#!/bin/sh
{
  exec 2>&1 >>"/var/log/my-root-service/$PAM_USER.log"
  echo "$PAM_USER logged in on $PAM_TTY on $PAM_RHOST at $(date)"
  do-something
} &

답변2

/etc/sudoers파일 에 다음 줄을 추가합니다(단축키 visudo).

Cmnd_Alias   CMDNAME = /path/to/binaryOrscriptToBeRunAsRoot
%groupnamehere ALL=NOPASSWD: CMDNAME

사용자 이름만 사용하는 대신 CMDNAME 그룹을 생성하면 해당 그룹의 모든 사용자가 해당 권한을 갖습니다.

groupadd groupnamehere
usermod -G groupnamehere usertoaddtogrouphere

이를 테스트하려면 사용자가 되어 다음 명령을 실행하십시오.

  1. 사용자 되기 => su - 사용자 이름여기
  2. 그룹 사용자가 => 그룹에 있는지 확인하세요.
  3. 명령 실행 => sudo CMDNAME 재시작
  4. 전역 명령이 아닌 경우 => sudo /path/to/binaryOrScript arg를 실행하세요.

예는 다음과 같습니다:

/etc/sudoers

Cmnd_Alias   TESTME = /usr/local/bin/testme.sh
%cmdgroup ALL=NOPASSWD: TESTME

/usr/local/bin/testme.sh

#!/bin/sh
#netstat can only be run by root on my servers.
#File permissions are 'chmod 700'
netstat -tln |grep :80

/etc/구성 파일

# You need to change 'testme' in the boundry to match the groupname created
# This checks to see if the user who just logged is part of that cmdgroup, 
# if so, it runs whatever is inside.
username=`id -un`
if groups $username | grep &>/dev/null '\btestme\b'; then
        sudo /usr/local/bin/testme.sh
fi

이 그룹의 사용자로 로그인하여 다음을 확인하세요.

[nonrootuser ~]#
tcp   0  0 :::80          :::*           LISTEN

관련 정보