Me gustaría crear un usuario que solo pueda hacer una cosa: a través de ssh, especifique un script (y argumentos de línea de comandos para el script) que resida en una carpeta en particular (para los fines de esta pregunta, llamémoslo /local/remote_only_scripts/foo
) y haga que ese script se ejecute y devuelve su salida.
Para que quede claro algunos ejemplos de cosas que no quiero que el usuario pueda hacer:
- Inicie sesión localmente en la cuenta. La aplicación de inicio de sesión es
/bin/login
. No es un script en la/local/remote_only_scripts/foo
carpeta, por lo que no debe ser llamado por el usuario. - Inicie sesión de forma remota en la cuenta. Nuevamente, el inicio de sesión (¿es eso lo que llama ssh?) No es un script en la carpeta correspondiente.
- Lista los contenidos del directorio. Está dentro
/bin/ls
. No es un script en el directorio apropiado. - Edite un archivo en ese directorio. emacs, vi, gedit la mayoría de los otros editores no son scripts en ese directorio.
- Ver el contenido de un archivo en ese directorio.
- Ejecute un archivo en ese directorio que no tiene permiso para ejecutar.
Tenga en cuenta que estos son ejemplos de que hay muchas otras acciones que no deseo que el usuario pueda hacer. Al considerar una acción, pregunte "¿está haciendo esto un script en /local/remote_only_scripts/foo
?" Si la respuesta es no, el usuario no debería poder hacerlo. Si la respuesta es sí, entonces el usuario debería poder hacerlo.
PD: Permítanme aclarar lo que quiero decir con "agregar un usuario". No me refiero a agregar un usuario a algún subsistema ssh. Más bien me refiero a agregar un usuario al sistema informático. Entonces, por ejemplo, tengo un sistema que ejecuta Debian estable, llámelo por su dirección, www.hg.bar.com. Quiero agregar un usuario (a través de kuser, users-admin o useradd o de alguna manera similar) llámelo hg_guest. hg_guest no puede iniciar sesión localmente ni hacer ninguna de las cosas en la lista anterior. Todo lo que hg_guest puede hacer es ejecutar scripts "remotamente". Dije que debería poder hacerlo a través de ssh, pero pensarlo ahora, tal vez permitirle usar ssh puede permitirle iniciar sesión localmente, por lo que puede ser necesario algún otro mecanismo.
fuente
command=
, las opcionesno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
son necesarias para restringir realmente la cuenta.Pruebe esto como el shell de inicio de sesión para el usuario:
Probablemente también desee tener esto en el
authorized_keys
archivo explícitamente como en la respuesta de Coren; pero reemplaza el '... / foo; con el programa aquí Eso evitará que los comandos de SSH comosftp
,scp
, yssh hostname command
.fuente
En el caso de que solo necesiten acceder a un script, esto funciona muy bien para mí. Agregue el usuario y cambie su shell predeterminado a la ruta del script. Cuando se conectan a través de ssh, ejecutará el script y cerrará su sesión.
server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest
server1:/ # grep hg_guest /etc/passwd
hg_guest: x: 2002: 100 :: / home / hg_guest: /local/remote_only_scripts/foo/script.sh
fuente