GNU/Linux >> Tutoriales Linux >  >> Linux

Permitir SCP pero no el inicio de sesión real mediante SSH

Solución 1:

rssh shell (http://pizzashack.org/rssh/) está diseñado precisamente para este propósito.

Dado que RHEL/CentOS 5.2 no incluye un paquete para rssh, puede buscar aquí para obtener un RPM:http://dag.wieers.com/rpm/packages/rssh/

Para usarlo, simplemente configúrelo como un shell para un nuevo usuario como este:

useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1

..o cambiar la shell por una existente como esta:

chsh -s /usr/bin/rssh scpuser1

..y editar /etc/rssh.conf para configurar rssh shell - especialmente descomentar allowscp para habilitar el acceso a SCP para todos los usuarios de rssh.

(Es posible que también desee utilizar chroot para mantener a los usuarios contenidos en sus hogares, pero esa es otra historia).

Solución 2:

Llegué tarde a esto, pero podría usar las claves ssh y especificar el comando exacto permitido en su archivo ~/.ssh/authorized_keys, p.

sin reenvío de puertos, sin pty, comando ="destino de origen de scp" ssh-dss ...

Es posible que deba usar ps to en el objetivo para establecer la configuración de comando correcta.

PD:si ejecuta un comando test scp con "-v", puede ver algo como esto

debug1: Sending command: scp -v -t myfile.txt

Notará que "-t" es una opción scp no documentada, utilizada por el programa en el otro extremo. Esto le da una idea de lo que necesita poner en las claves_autorizadas.

EDITAR: Puede encontrar más información (con varios enlaces) en esta pregunta de StackOverflow.

Aquí hay un ejemplo práctico de esto, para un usuario llamado backup_user en el lado del servidor.

~backup_user/.ssh/authorized_keys contenido en el lado del servidor (con algunas restricciones de seguridad más):

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...

Cree un enlace en ~backup_user/ que vincule al directorio donde se debe acceder al contenido.

$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT

Ahora, desde el lado del cliente, el siguiente comando debería funcionar:

scp -v  -r  -P 2222 -i .ssh/id_rsa_key_file path/to/data [email protected]:~/CONTENT

Qué hace este comando:

  • Muestra información detallada (opcional :puede eliminar el -v desde el comando y el archivo authorized_keys)
  • Copia recursivamente el contenido de la ruta/a/los datos. (opcional :puede eliminar -r desde el comando y el archivo authorized_keys si no desea hacer una copia recursiva)
  • Utiliza el puerto 2222 para conectarse al servidor (opcional :puede eliminar -P 2222 del comando)
  • Utiliza un archivo de identidad para automatizar la conexión (opcional :puede eliminar -i .ssh/id_rsa_key_file
  • El contenido de path/to/data se copiará en /path/to/directory/with/accessible/content/

Para hacer una copia de un archivo (o varios) del servidor al cliente, debe crear un script de shell que maneje esto como se describe aquí

Solución 3:

Llego un poco tarde a la fiesta, sin embargo, te sugiero que le eches un vistazo al ForceCommand directiva de OpenSSH.

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

De acuerdo, esto es SFTP y no SCP, pero alcanza el mismo objetivo, de manera más segura que con un shell restringido. Además, puede hacer chroot al usuario si lo desea.

Solución 4:

Yo uso MySecureShell para hacer esto. También puede configurar otras restricciones.

https://github.com/mysecureshell/mysecureshell

Limita las conexiones solo a SFTP/SCP. Sin acceso de shell.

Solución 5:

Recomiendo usar scponly.

Es un shell restringido que permite a los usuarios hacer exactamente lo que parece, enviar archivos SCP al servidor, pero no iniciar sesión. La información y las descargas del código fuente para el software están disponibles aquí y los paquetes RPM precompilados están disponibles a través de Repositorios EPEL YUM.

Una vez instalado, deberá configurar cada cuenta de usuario, a la que desea restringir el acceso, para usar el shell restringido recién instalado. Puede hacerlo manualmente a través de /etc/passwd o usar el siguiente comando:usermod -s /usr/bin/scponly USERNAME


Linux
  1. Ssh:¿restringir un usuario de Ssh/scp/sftp a un directorio?

  2. ¿Ejecutar un comando remoto en la conexión Ssh, antes de iniciar sesión?

  3. ¿Comando no encontrado en Zsh, pero encontrado en Bash?

  4. ¿El comando de suspensión usando el comando de pantalla no se muestra en Ps?

  5. 10 ejemplos prácticos del uso del comando scp

Uso de shell seguro (SSH) para inicio de sesión y copia segura (SCP) para transferencia de datos en Linux

Restrinja el inicio de sesión SSH a una IP o host específico

Eliminar archivos del host remoto mediante SSH

hacer que el servidor Linux permita rsync/scp/sftp pero no un inicio de sesión de terminal

`ssh <host>` es un shell de inicio de sesión, pero `ssh <host> <comando>` no lo es.

comando de linux encontrado pero no encontrado al usar sudo