질문

질문

질문

사용자가 (또는 다른 방법으로) 로그인했을 때 루트로 스크립트를 어떻게 실행합니까 pam_exec.so? 스크립트를 실행하려면 사용자에 대한 정보가 필요합니다.

문제와 환경

/path/script.sh사용자가 로그인할 때마다 루트로 스크립트를 실행 하고 싶습니다 . 또한 로그인한 사용자(예: 스크립트에 대한 환경 변수 또는 매개변수)를 알아야 합니다. 최신 버전의 CentOS 7을 사용하고 있습니다.

현재 /etc/pam.d/system-auth다음 줄을 편집하고 추가하고 있습니다.

session     optional     pam_exec.so /path/script.sh

이것은 내가 사용자일 때 제대로 작동 sudo su하지만 다른 방법으로 사용자를 인증하면 작동하지 않습니다(스크립트는 루트로 실행해야 함). 다시 말해서,

$ su - robot7
Password: 
/path/script.sh failed: exit code 1
-bash-4.2$

동시에 실패

$ sudo su - robot7
Last login: Thu Jun 14 09:33:56 MDT 2018 on pts/5
-bash-4.2$

예상대로 작동하고 스크립트를 실행하지만 주의할 점이 있습니다. 사용자가 연결을 끊을 때도 스크립트가 실행됩니다. $PAM_USER두 번째 경우의 변수는 올바른 사용자 이름(root가 아닌robot7)입니다.

이 스크립트는 프로덕션 환경에서 사용되며 사용자는 이를 비활성화할 수 없으며 다른 셸이 있을 수 있습니다. 유사한 스크립트 .bashrc나 다른 스크립트를 사용하여 실행할 수 없습니다.


대신 /etc/pam.d/system-auth실행되도록 명령을 설정하면 (비슷한 질문에서 제안한 대로)authsession안 돼요달리다.

편집하다

seteuid명령 에 추가하면 pam_exec.so사용자가 인증( )할 때 스크립트를 실행할 수 있지만 su - robot7SSH(사용자의 기본 로그인 방법)를 통해서는 실행할 수 없습니다.

답변1

보안 컨텍스트로 인해 스크립트가 실행되지 않습니다. 로그는 systemd모든 사용자가 스크립트를 실행할 수 있음에도 불구하고 스크립트를 실행할 수 없음을 나타냅니다. 일부 보안 정책은 스크립트 경로를 좋아하지 않습니다.

스크립트를 으로 옮겼 /bin더니 오류가 즉시 해결되었습니다.

관련 정보