
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 sshd
que 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_keys
donde describe el formato. En mi Debian el manual dice [el énfasis es mío]:
AuthorizedKeysFile
especifica 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_keys
y~/.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 especificarno-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
restrict
opció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_keys
servidor, 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 sitúejecute 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 eval
la variableyno uses $SSH_ORIGINAL_COMMAND
sin comillas, a menos que verifiques su seguridad o lo desinfectes primero.
Una línea de ejemplo ~/.ssh/authorized_keys
que permite al propietario de una clave específica ver el resultado df -h
se ve así:
command="df -h",no-pty ssh-rsa AAA…(public key here)…
no-pty
(Para ver la descripción, man 5 authorized_keys
consulte . 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 -h
y 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