Pergunta
Como posso executar um script como root quando um usuário faz login com pam_exec.so
(ou outro)? O script requer informações sobre o usuário para funcionar.
Problema e Ambiente
Eu gostaria de executar um script - /path/script.sh
- como raiz toda vez que um usuário faz login. Também preciso conhecer o usuário que efetuou login (como uma variável de ambiente ou argumento para o script, por exemplo). Eu estou em uma versão recente do CentOS 7.
No momento, estou editando /etc/pam.d/system-auth
e adicionando a seguinte linha:
session optional pam_exec.so /path/script.sh
Isso funciona bem quando eu me tornar o usuário com sudo su
, mas não funciona se eu autenticar o usuário de outra forma (o script deve ser executado como root). Em outras palavras,
$ su - robot7
Password:
/path/script.sh failed: exit code 1
-bash-4.2$
falha enquanto
$ sudo su - robot7
Last login: Thu Jun 14 09:33:56 MDT 2018 on pts/5
-bash-4.2$
funciona e executa o script como esperado com uma ressalva: o script também é executado quando os usuários se desconectam. A variável $PAM_USER
no segundo caso é o nome de usuário correto (robô7, não raiz).
Esse script será usado em um ambiente de produção em que os usuários não devem ser capazes de desativá-lo e podem ter shells diferentes; Não consigo usar scripts como .bashrc
ou outros para executá-lo.
Se eu definir o comando em /etc/pam.d/system-auth
para ser executado em auth
e não session
(conforme sugerido por perguntas semelhantes), nunca será executado.
Editar
Adicionar seteuid
ao comando pam_exec.so
permite que o script seja executado quando o usuário autentica ( su - robot7
), mas não executa o script no SSH (que é o método principal com o qual os usuários fazem login). / p>