Usuario falso en el servidor SSH restringido a usar solo algunos comandos

Usuario falso en el servidor SSH restringido a usar solo algunos comandos

Estoy tratando de crear un usuario falso (un usuario que puede iniciar sesión desde SSH pero que no existe en el sistema) que tenga algunas restricciones (por ejemplo, solo puede usar un comando y cuando lo haga, también se ejecutará otro comando). . ¿Hay una manera de lograr esto? No puedo encontrar una manera de crear un usuario falso en openssh-server, y mucho menos la parte de restricción.

Respuesta1

Es común que los servidores SSH en Linux se integren con el sistema y no introduzcan otra capa de usuarios. No es como Samba ni FTP, donde existe esa capa de usuarios específicos de Samba o FTP. Supongo que no es una tarea trivial hacer sshdque OpenSSH defina un conjunto independiente de usuarios (pero tal vez otra respuesta me sorprenda).

Tal vez su intención de crear un usuario falso se deba al hecho de que no es root en el servidor SSH y no puede crear un usuario real allí. Si es así, esto es lo que puedes hacer de todos modos 1 :

Vea man 5 authorized_keysdonde describe el formato. En mi Debian el manual dice [el énfasis es mío]:

AuthorizedKeysFileespecifica los archivos que contienen claves públicas para la autenticación de clave pública; si no se especifica esta opción, el valor predeterminado es ~/.ssh/authorized_keysy ~/.ssh/authorized_keys2. Cada línea del archivo contiene una clave (las líneas vacías y las líneas que comienzan con '#' se ignoran como comentarios). Las claves públicas constan de los siguientes campos separados por espacios: opciones, tipo de clave, clave codificada en base64 y comentario. El campo de opciones es opcional. […]

Las opciones (si están presentes) constan de especificaciones de opciones separadas por comas. No se permiten espacios, excepto entre comillas dobles. Se admiten las siguientes especificaciones de opciones (tenga en cuenta que las palabras clave de opciones no distinguen entre mayúsculas y minúsculas):

[…]

command="command"
Especifica que el comando se ejecuta siempre que se utilice esta clave para la autenticación. Se ignora el comando proporcionado por el usuario (si lo hay).El comando se ejecuta en un pty si el cliente lo solicita; de lo contrario, se ejecuta sin tty. Si se requiere un canal limpio de 8 bits, no se debe solicitar un pty o se debe especificar no-pty. Se puede incluir una cita en el comando entrecomitándola con una barra invertida.

Esta opción puede resultar útil para restringir ciertas claves públicas para realizar solo una operación específica. Un ejemplo podría ser una clave que permita realizar copias de seguridad remotas pero nada más.Tenga en cuenta que el cliente puede especificar el reenvío TCP y/o X11 a menos que estén explícitamente prohibidos, por ejemplo, usando la restrictopción clave.

[…]

De esta manera, como usuario normal, puedes permitir que otra persona (de ahora en adelante: un invitado) inicie sesión.como tuy ejecutar un comando específicocomo tuautomáticamente. Simplemente registre su clave pública en su ~/.ssh/authorized_keysservidor, usando la command="command"opción.

El comando puede ser un programa personalizado o un script que permite al invitado elegir una tarea de una lista o escribir una palabra clave para elegir una tarea; o escribir un comando "interno" que será validado y permitido o no; el programa ejecutará algo en consecuencia. Depende de usted cuál es el comando/programa/script.

Tenga en cuenta desde el punto de vista del servidor SSH y sus administradores el invitadoestú. Es su cuenta la que ejecuta el comando y si su programa o script personalizado permite al invitado ejecutar un comando arbitrario de alguna manera (por ejemplo, generando un shell primero de alguna manera), entonces será como siejecute el comando.

También tenga en cuenta que el comando se ejecuta en un shell no interactivo. Será tu shell (el que elijas chsh) con tu configuración. El shell puede generar algunos archivos (vercómo se comporta bash), así que asegúrese de que sea seguro obtenerlos cuando el invitado se conecte.

El manual indica que "se ignora el comando proporcionado por el usuario (si lo hay)". Sin embargo en mis pruebas el ejecutable forzado pudo obtenerlo de su entorno, la variable se llama SSH_ORIGINAL_COMMAND. Esto significa que puede permitir que el invitado pase cierta información (por ejemplo, opciones) directamente en su invocación de ssh; en el lado del servidor, su programa lo recuperará de la variable. En un código shellno evalla variableyno uses $SSH_ORIGINAL_COMMANDsin comillas, a menos que verifiques su seguridad o lo desinfectes primero.

Una línea de ejemplo ~/.ssh/authorized_keysque permite al propietario de una clave específica ver el resultado df -hse ve así:

command="df -h",no-pty ssh-rsa AAA…(public key here)…

no-pty(Para ver la descripción, man 5 authorized_keysconsulte . Hay otras opciones que pueden resultarle útiles). Ahora, quien use esta clave específica para conectarse al servidor (usando su inicio de sesión) verá el resultado df -hy se desconectará.


1 Probablemente. El servidor SSH puede configurarse para denegar varias cosas.

Respuesta2

Es posible que desee considerar la implementación de un honeypot SSH. Básicamente, un servidor ficticio que parece vulnerable pero que no tiene acceso real a nada. Todo queda registrado y puedes restringir el acceso a los comandos.

Configurar uno no es difícil y hay muchos recursos en línea para obtener instrucciones sobre cómo implementarlo. ¡Sin embargo, puede que la respuesta sea un poco larga aquí!

EDITAR :Superusuario no es realmente un lugar para recomendaciones, pero parece que usamos bien uno con muchos tutoriales en línea:https://github.com/cowrie/cowrie Del archivo LÉAME:

Elija ejecutar como un shell emulado (predeterminado):

  • Sistema de archivos falso con la capacidad de agregar/eliminar archivos. Se incluye un sistema de archivos falso completo que se asemeja a una instalación de Debian 5.0.
  • Posibilidad de agregar contenidos de archivos falsos para que el atacante pueda capturar archivos como /etc/passwd. Solo se incluyen contenidos mínimos de archivos.
  • Cowrie guarda los archivos descargados con wget/curl o cargados con SFTP y scp para su posterior inspección

información relacionada