¿Permitir SFTP pero no permitir SSH?


94

Estoy comenzando una pequeña empresa de alojamiento para algunos amigos y pequeños clientes, nada grande.

Quiero dar a mis "clientes" el derecho de administrar sus archivos en el servidor. Odio el FTP ya que no es seguro y, en mi opinión, es obsoleto.

Por lo tanto, me gustaría permitir que mis usuarios se conecten a través de SFTP pero no permitir que se conecten a través de SSH. (Lo sé, lo sé, SFTP está usando SSH). Pero me preguntaba, ¿es posible?

¡Entonces no tendría que instalar un servicio FTP en el servidor y todo sería increíble!

Respuestas:


121

A partir de la versión 4.9 OpenSSH (no disponible en centos 5.x, pero la función ChrootDirectory fue compatible) tiene un internal-sftpsubsistema:

Subsystem sftp internal-sftp

Y luego bloquee otros usos:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Agregue sus usuarios al sftponlygrupo. Debe cambiar el directorio de inicio del usuario a /debido al chroot y /home/userdebe ser propiedad de root. También lo establecería /bin/falsecomo el shell del usuario.


¡Guauu! ¡Súper asombroso! Probaré esto y volveré aquí para validar. ¡Muchas gracias!
Tommy B.

¡+1 para lo de ChrootDirectory!
Kyle Hodgson

1
Después de hacer esto, mi usuario sftponly no puede acceder por ssh y puede conectarse por sftp. Sin embargo, ¡no puede ver ningún archivo en absoluto! A pesar de que estos archivos tienen permiso para este usuario. :-(
Emilio Nicolás

3
En caso de que quiera hacer esto y encuentre una entrada en su sshd_config con "/ usr / lib / openssh / sftp-server" ya existente, marque aquí: serverfault.com/questions/660160/… - internal-sftp es " newer , mejor y más fácil "
Xosofox

19

Hay una cáscara scponly qué hace esto. También puede chroot .


Esto sería genial si necesita tanto usuarios SFTP como usuarios SSH. Simplemente reemplace el shell en / etc / passwd para aquellos restringidos solo a SFTP.
Dragos


2

Puede modificar / etc / passwd y darle a ese usuario un shell falso para que no pueda usar ssh.


11
¿Probaste esto?
splattne

8
Cuando intento configurar el shell para que /bin/falseni ssh ni sftp funcionen
Brad Mace

2
/ bin / false es no permitir ningún tipo de inicio de sesión, ese no es el enfoque correcto aquí. La respuesta aceptada de Rob Wouters es cómo debe limitar a los usuarios a SFTP solamente, no cambiando el shell. Si quisieras cambiar la carcasa, la respuesta de @ Stone sería una buena idea.
jwbensley

1
entonces, ¿QUÉ shell se debe usar suponiendo que / bin / bash no es aceptable y / bin / false o / sbin / nologin denegar el acceso?
Putnik

1

Utilizo el método de especificar el shell de usuario como / bin / false como se mencionó. Sin embargo, debe asegurarse de que / bin / shell esté en / etc / shells. Entonces funciona ssh = no ftp = ok.

También uso vsftpd y agrego este
chroot_local_user = YES a /etc/vsftpd/vsftpd.conf para que los ftp-ers no puedan ver la fecha más que la suya.

La ventaja de estos cambios simples es que no hay una configuración molesta para la configuración ssh para cada usuario.


1

No olvides encontrar la línea UsePAM yesy comentarla:

#UsePAM yes

Sin deshabilitar esto, su servidor SSH se bloqueará al recargar / reiniciar. Como no necesita funciones sofisticadas de PAM, está bien.


0

La configuración de ssh para habilitar solo sftp para algunos usuarios seleccionados es una buena idea y funciona correctamente, siempre que instale scponlyo rssh.

rsshfunciona bien, a menos que necesite configurar la cárcel, en este caso, tratar de seguir las instrucciones proporcionadas por los manuales de CHROOT es una locura, lo que lleva a "copiar" grandes partes de los ejecutables del sistema y la biblioteca justo debajo de "cada cárcel de usuario", incluido el rsshpropio shell. Es un método de pérdida de espacio.

scponly necesita una comprensión profunda en la configuración que conduzca a un problema siempre presente de rechazo de inicio de sesión en caso de configuración de la cárcel.

La forma directa de permitir funcionalidades "ftp" con la cárcel funcionando correctamente, el soporte SSL / TLS para transacciones seguras e inicio de sesión es utilizar un VSFTPD "antiguo pero funcional", que se instala de forma rápida y limpia y ofrece toda la configurabilidad según sea necesario y, por último pero no menos importante: ¡funciona!

Maurizio


0

Desafortunadamente, todas las respuestas son extremadamente engañosas: haga lo siguiente:

  1. Primero cree el usuario sftp y el grupo sftp

  2. Cree un directorio separado como raíz para los archivos SFTP: sudo mkdir -p /home/sftpdir

  3. Tenga un archivo sshd_config probado que permita SSH sobre el puerto 22 pero también SFTP en un puerto aleatorio por razones de seguridad
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Reiniciar y verificar el estado del servicio sshd

    sudo service sshd restart

    servicio sshd status

  2. Crea un archivo Shell. Agregar ejecución para hacer eco de un mensaje de notificación

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Esta cuenta está limitada solo al acceso SFTP". sudo tee -a / bin / sftponly

  3. Otorgue permisos de ejecución y anexe al archivo de shells

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. finalmente Pruebe y no debería poder conectarse.

  5. Una plantilla para usar el cliente SFTP con una clave SSH y verbosidad básica:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.