Me gustaría crear un usuario que solo pueda hacer una cosa:a través de ssh, especifique un script (y los argumentos de la línea de comandos para el script) que resida en una carpeta en particular
(a los efectos de esta pregunta, llamémoslo /local/remote_only_scripts/foo
) y haga que ese script se ejecute y devuelva 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/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 así como lo llama ssh?) No es un script en la carpeta correspondiente.
- Enumere el contenido del directorio. ls está en
/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.
- Ejecutar un archivo en ese directorio que no tiene permiso para ejecutar.
Tenga en cuenta que estos son ejemplos hay muchas otras acciones que no quiero que el usuario pueda hacer. Al considerar una acción, pregunte "¿Esto lo está haciendo 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 Stable, llámelo por su dirección, www.hg.bar.com. Quiero agregar un usuario (a través de kuser, users-admin o useradd o alguna forma similar) llámelo hg_guest. hg_guest no puede iniciar sesión localmente ni hacer ninguna de las cosas de la lista anterior. Todo lo que hg_guest puede hacer es ejecutar scripts "de forma remota". Dije que debería poder hacerlo a través de ssh, pero pensándolo ahora, tal vez permitirle usar ssh le permita iniciar sesión localmente, por lo que es posible que se requiera algún otro mecanismo.
Respuesta aceptada:
Hay un comando opción en el archivo authorized_keys. Esta opción parece hacer exactamente lo que quieres.
Relacionado:Linux:¿recuperación de datos de un formato accidental en la partición ext4?Tenga en cuenta que no es un chroot o un shell restringido. Está permitiendo ejecutar solo esos comandos a través de ssh. Con tu ejemplo, sería:
ssh somehost /local/remote_only_scripts/foo
Para este archivo de claves_autorizadas:
command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key...
Hay muchas formas si no desea que su usuario pueda iniciar sesión localmente. Puedes:
- simplemente establezca su shell en /bin/false (tal vez necesite /bin/true ya que ssh necesita un inicio de sesión válido)
- bloquear su contraseña, ver
passwd -l
EDITAR :agregó más opciones de restricción y aclaró cómo elimina el acceso local.