![Execute um script como root quando um usuário não root fizer login](https://rvso.com/image/1568338/Execute%20um%20script%20como%20root%20quando%20um%20usu%C3%A1rio%20n%C3%A3o%20root%20fizer%20login.png)
Eu já vi essa pergunta feita antesaquieaquimas eles são muito antigos e não consegui fazer nenhuma solução funcionar.
Basicamente, preciso executar um script ou comando automaticamente como root sempre que um usuário não root fizer SSH no servidor. O servidor está executando o Ubuntu 16.04 e usando OpenSSH, se isso fizer diferença.
EDIT: Para ser mais específico, quero encerrar um processo que foi criado pelo usuário A quando o usuário B faz login. Meus colegas de quarto e eu mineramos criptografia em meu servidor de jogo sem cabeça e gostaria de poder executá-lo pkill miner.sh
automaticamente quando alguém fizer login independentemente de quem o iniciou. Como seria extremamente inseguro permitir que os usuários eliminassem os processos uns dos outros, parece que isso é mais difícil do que o esperado.
Responder1
pam_exec apontou na direção certa, mas setuid é um mau conselho; a maioria (todos?) dos Linux modernos o ignora em scripts de shell e o respeita apenas em arquivos binários executáveis.
Seria um problema se o script fosse executado (como root) em horários diferentes do login? Se estiver tudo bem para ele ser executado com mais frequência do que o estritamente necessário, você pode criar um script wrapper que é executado a cada login do ssh com permissões de usuário que usa sudo (sem senha) para executar seu script como root. Isso, entretanto, significa que os usuários também poderiam executá-lo manualmente (como root) quantas vezes quisessem.
Para configurar isso, adicione esta linha a /etc/pam.d/sshd
account optional pam_exec.so /etc/pam.d/LoginWrapper.sh
Em seguida, crie o arquivo /etc/pam.d/LoginWrapper.sh com conteúdo:
#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi
Observe que se o seu sudo estiver em um caminho diferente, você deverá atualizá-lo acima.
Agora em /etc/sudoers adicione a linha:
ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh
Responder2
Resolvi isso adicionando todos os usuários a um grupo chamado mygroup
sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2
Em seguida, modifique /etc/sudoers
para permitir que este grupo seja executado sudo pkill
sem senha, adicionando o seguinte aos sudoers
%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill
Então adicionei o comando sudo pkill
na parte inferior /etc/profile
e funcionou perfeitamente.