Shell de apertura personalizada

8

El entorno es Ubuntu Server 12.04

Me gustaría crear un usuario en un servidor que solo pueda ssh en un shell que ejecuta tail -f en un archivo de registro y cierre la sesión una vez que finalice el programa (ctrl + c).

¿Hay una manera de lograr esto?

Un azul
fuente

Respuestas:

8

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.

Falcon Momot
fuente
funciona muy bien, muchas gracias por su respuesta rápida y precisa.
Ablue
2
La única razón por la que desea agregar algo /etc/shellses 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.
Jonathan Callen
1
Para agregar lo que dijo @JonathanCallen: en realidad es una fuga de seguridad agregar ese script /etc/shellsya que eso permitiría al usuario cambiar su shell (¡porque /usr/bin/tail_log_fileentonces se consideraría un "shell sin restricciones")!
Joachim Sauer
Ok, lo eliminaré.
Ablue
1
Eso es demasiado complicado; Los comandos forzados (ver la respuesta de @tink) son la forma de hacerlo.
Restablecer a Monica - M. Schröder
10

Los comandos forzados ssh vienen a la mente si está contento de usar la autenticación basada en pares de claves.

man authorized_keys
/command=
tink
fuente
2

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:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubcontiene una línea adecuada para poner en el ~/.ssh/authorized_keysarchivo de los usuarios :

ssh-rsa AAAA...UDz47Nl djs@sardinia

pero puede agregar un comando a esto, y ssh ejecutará ese comando cuando inicie sesión con la tecla:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

Entonces el usuario puede usar la máquina mediante ssh ssh -i restricted-key.

Dan
fuente