![Ejecutar un script como root cuando un usuario no root inicia sesión](https://rvso.com/image/1568338/Ejecutar%20un%20script%20como%20root%20cuando%20un%20usuario%20no%20root%20inicia%20sesi%C3%B3n.png)
He visto esta pregunta antesaquíyaquípero son bastante antiguos y no he podido conseguir que funcione ninguna solución.
Básicamente, necesito ejecutar un script o comando automáticamente como root cada vez que un usuario no root ingresa SSH al servidor. El servidor ejecuta Ubuntu 16.04 y usa OpenSSH si eso hace la diferencia.
EDITAR: Para ser más específico, quiero eliminar un proceso creado por el usuario A cuando el usuario B inicia sesión. Mis compañeros de cuarto y yo extraemos criptomonedas en mi servidor de juegos sin cabeza y me gustaría poder ejecutarlo pkill miner.sh
automáticamente cuando alguien inicia sesión. independientemente de quién lo inició. Dado que sería tremendamente inseguro permitir que los usuarios eliminen los procesos de los demás, parece que esto es más difícil de lo esperado.
Respuesta1
pam_exec le indica la dirección correcta, pero setuid es un mal consejo; la mayoría (¿todos?) los Linux modernos lo ignoran en los scripts de shell y solo lo respetan en los archivos ejecutables binarios.
¿Sería un problema si el script se ejecutara (como root) en momentos distintos al inicio de sesión? Si está bien que se ejecute con más frecuencia de lo estrictamente necesario, puede crear un script contenedor que se ejecute en cada inicio de sesión ssh con permisos de usuario que use sudo (sin contraseña) para ejecutar su script como root. Sin embargo, esto significa que los usuarios también podrían ejecutarlo manualmente (como root) tantas veces como quisieran.
Para configurar esto, agregue esta línea a /etc/pam.d/sshd
account optional pam_exec.so /etc/pam.d/LoginWrapper.sh
Luego cree el archivo /etc/pam.d/LoginWrapper.sh con contenido:
#!/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
Tenga en cuenta que si su sudo está en una ruta diferente, debe actualizarlo arriba.
Ahora en /etc/sudoers agrega la línea:
ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh
Respuesta2
Resolvió esto agregando todos los usuarios a un grupo llamado mygroup
sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2
Luego modifique /etc/sudoers
para permitir que este grupo se ejecute sudo pkill
sin contraseña agregando lo siguiente a sudoers
%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill
Luego agregué el comando sudo pkill
al final /etc/profile
y funcionó de maravilla.