Execute um script como root quando um usuário não root fizer login

Execute um script como root quando um usuário não root fizer login

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.shautomaticamente 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/sudoerspara permitir que este grupo seja executado sudo pkillsem senha, adicionando o seguinte aos sudoers

%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill

Então adicionei o comando sudo pkillna parte inferior /etc/profilee funcionou perfeitamente.

informação relacionada