Para ser pedante, no será ctrl + c, sino SIGHUP
(más cerca de ctrl + d) lo que mata la aplicación.
Puedes poner esencialmente lo que quieras en el shell del usuario /etc/passwd
. Simplemente reemplace el valor predeterminado en la línea passwd del usuario (probablemente /bin/bash
) con otro programa. Ese programa puede ser un script, como /usr/bin/tail_log_file
, con estos contenidos, propiedad de root: root, con umode 0755:
#!/bin/rbash
tail -f /path/to/logfile
Puede usar algún intérprete que no sea rbash, pero es aconsejable usar un shell restringido en tales casos.
Para ser extremadamente pedante al respecto, debe agregar la ruta del script /etc/shells
, pero generalmente encuentro que funciona de todos modos.
Tenga en cuenta también que el usuario podría potencialmente poner el script en segundo plano, o usar algunas opciones ( ssh username@host bash
) y aún así adquirir un shell. Si desea restringir al usuario de esa manera, los buenos permisos del sistema de archivos son la única solución real.
/etc/shells
es para permitir que los usuarios que tienen algo más como su shell establezcan su shell para esto; el superusuario (root
) siempre puede cambiar el shell de cualquiera a lo que quiera./etc/shells
ya que eso permitiría al usuario cambiar su shell (¡porque/usr/bin/tail_log_file
entonces se consideraría un "shell sin restricciones")!Los comandos forzados ssh vienen a la mente si está contento de usar la autenticación basada en pares de claves.
fuente
Puede configurar ssh para ejecutar un comando de su elección cuando inicie sesión con la autenticación de clave pública. Para hacer esto, genere un par de claves:
restricted-key.pub
contiene una línea adecuada para poner en el~/.ssh/authorized_keys
archivo de los usuarios :pero puede agregar un comando a esto, y ssh ejecutará ese comando cuando inicie sesión con la tecla:
Entonces el usuario puede usar la máquina mediante ssh
ssh -i restricted-key
.fuente