¿Cómo configurar un servidor SFTP restringido en Ubuntu?

81

Me gustaría saber cómo configurar cuentas de usuario raíz, sudo y solo sftp que no requerirán autenticación de clave pública al iniciar sesión. También me gustaría saber cómo configurar los directorios principales de los usuarios solo sftp donde No se puede acceder al nivel superior a otros directorios.

Yuya Kobayashi
fuente

Respuestas:

91

El mejor recurso para ayudarlo a comenzar a configurar un servicio ssh en una máquina Host usando Ubuntu es OpenSSH Server . Esto le permitirá usar el Protocolo de transferencia de archivos SSH (también Protocolo seguro de transferencia de archivos o SFTP) para acceder, transferir y administrar archivos a través de SSH desde una máquina del Cliente.

Descripción general de la solución

  • En Ubuntu, puede configurar una OpenSSH servermáquina Host y luego un usuario puede usarla sshpara conectarse desde el Cliente al servidor Host utilizando solo un nombre de usuario y contraseña. Tenga en cuenta, sin embargo, que se recomienda la autenticación de clave pública,

"Asegúrese de tener una contraseña segura antes de instalar un servidor SSH (puede deshabilitar las contraseñas por completo )"

  • Las cuentas de usuario administrativas creadas en el host tendrán privilegios de sudo, las cuentas de usuario estándar creadas en el host no.

Instale y configure su servidor OpenSSH en el host

Para instalar un servidor OpenSSH en el host:

sudo apt-get install openssh-server

Proporcione a su host una dirección IP estática para que pueda conectarse de manera confiable:

nm-connection-editor

Para configurar su servidor OpenSSH , "primero, haga una copia de seguridad de su archivo sshd_config copiándolo en su directorio de inicio o haciendo una copia de solo lectura en / etc / ssh haciendo:"

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

"Una vez que haya hecho una copia de seguridad de su sshd_configarchivo, puede hacer cambios con cualquier editor de texto, por ejemplo:"

sudo -H gedit /etc/ssh/sshd_config

Debe reiniciar su servicio ssh en el Host para que estos cambios surtan efecto

sudo service ssh restart

Considere las siguientes medidas de seguridad

  • No habilite el reenvío de puertos en su enrutador: cuando un extraño le pide a su enrutador que se conecte al puerto 22, etc., su enrutador no cumple a menos que haya habilitado el reenvío de puertos
  • Deshabilitar inicio de sesión raíz: Comentario fuera PermitRootLogin without-password; agregar PermitRootLogin noa Host's/etc/ssh/sshd_config
  • Elija un puerto SSH no estándar: Comentario Port 22; agregar Port <new-port-number>a Host's/etc/ssh/sshd_config
  • Permitir solo conexiones locales: Agregar ListenAddress 192.168.0.10
  • Permitir ciertos usuarios en ciertos puertos: Agregar AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>o AllowUsers <username>@111.222.333.*al Host/etc/ssh/sshd_config
  • Permitir solo conexiones de clave RSA (sin contraseña): agregue el contenido de ~/.ssh/id_rsa.pubcada Cliente como una nueva línea de Host ~/.ssh/authorized_keys. Luego agregue PasswordAuthentication noa Host's/etc/ssh/sshd_config
  • Intentos de craqueo de los atacantes lentos: use ufw (firewall sin complicaciones) en el host para calificar las conexiones entrantes limitadas a 10 / minuto: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Para obtener más ideas, consulte Mantener seguro el acceso SSH

Si cree que debe hacerlo, habilite PasswordAuthenticationen su sshd_configarchivo

Encuentra la línea con la frase PasswordAuthenticationy haz que se lea:

PasswordAuthentication yes

Guarde su nuevo sshd_configarchivo y luego reinicie el sshservicio de Host :

sudo service ssh restart

Si necesita acceso desde cualquier lugar a través de Internet, configure el reenvío de puertos en su enrutador local para dirigir el tráfico a su servidor OpenSSH

Tenga en cuenta que el sshservicio del host del puerto escucha en el sshd_configarchivo y configure su enrutador para reenviar el tráfico TCP / UDP dirigido a este puerto a la dirección IP de su servidor OpenSSH.

Conéctese al host e inicie sesión a través de la línea de comandos o terminal

  • Para abrir una terminal de shell SFTP como <username>en el Host, abra una Terminal en el Cliente e ingrese el siguiente comando, reemplazando 123.123.1.23con la dirección IP del Host:

    sftp <username>@123.123.1.23
    
    • Si cambió el número de puerto que escucha el servidor OpenSSH del host, haga lo siguiente:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Para abrir una terminal de shell SSH como <username>en el Host, abra una Terminal en el Cliente e ingrese el siguiente comando, reemplazando 123.123.1.23con la dirección IP del Host:

    ssh <username>@123.123.1.23
    
    • Si cambió el número de puerto que escucha el servidor OpenSSH del host, haga lo siguiente:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

Conéctese al host e inicie sesión a través del administrador de archivos GUI (por ejemplo, Nautilus) para obtener más acceso visual SFTP para habilitar las transferencias de archivos

  1. Abra Nautilus en el cliente
  2. Seleccione Archivo> Conectar al servidor
  3. Tipo: SSH
  4. Servidor: ingrese la dirección IP del host
  5. Puerto: número de puerto especificado en el sshd_configarchivo del Host
  6. Nombre de usuario: nombre de usuario
  7. Contraseña: contraseña

ingrese la descripción de la imagen aquí

En 14.04:

  1. Abra Nautilus en el cliente
  2. Conectar al servidor
  3. Tipo: `ssh @ 123.123.1.23:

Cree cuentas de usuario estándar en el host con permisos de archivo limitados fuera de su carpeta de inicio

Los permisos de archivo adecuados establecidos en el Host garantizan que cada usuario estándar (sin privilegios de sudo) que cree en el Host será el propietario de su /home/new_userdirectorio pero tendrá permisos limitados con el resto de la estructura del directorio.

  • Los permisos limitados no necesariamente significan que no pueden ver los nombres de archivo y la estructura del directorio.

Espero que sea útil!

jtd
fuente
99
Me parece que esa respuesta, aunque parece muy completa, en realidad no responde la parte más difícil de la pregunta de los OP: "donde no pueden acceder a otros directorios de nivel superior". Si se implementa como anteriormente, el usuario podría leer la gran mayoría de la estructura de directorios.
ostergaard
2
Para ampliar el comentario de @ ajostergaard, esto crea un usuario regular de Unix y les permite el acceso SSH y SFTP. Un usuario normal de Unix (no root) aún puede acceder y ver una gran cantidad de archivos confidenciales, como la configuración del servidor web y mucho más. Esto definitivamente no es seguro y definitivamente no satisface la limitación solicitada por el OP.
Simon Woodside
50

Paso 1: instale el paquete OpenSSH si no está instalado

sudo apt-get install openssh-server

Paso 2: Crear un grupo separado para usuarios de SFTP.

sudo addgroup ftpaccess

Paso 3: edite el /etc/ssh/sshd_configarchivo y realice los cambios a continuación. Encuentra y comenta debajo de la línea.

#Subsystem sftp /usr/lib/openssh/sftp-server

y agregue estas líneas al final del archivo.

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Paso 4: reinicie el servicio sshd.

sudo service ssh restart

Paso 5: Agregue un usuario con el grupo ftpaccess y cree una contraseña.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

Paso 6: Modifique el permiso del directorio de inicio.

sudo chown root:root /home/paul

Paso 7: Cree un directorio dentro de casa para cargar y modificar el permiso con el grupo.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

Eso es .

Consulte: Configurar SFTP en ubuntu

ytgmuabm
fuente
Esta parece ser la respuesta correcta. No lo probé, pero al menos mencionó la dificultad principal, restringir la ruta de navegación.
Mohammed Noureldin
Lo probé y era demasiado permisivo, debido a que los permisos predeterminados en la carpeta de inicio eran 755. Lo hice sudo chmod 711en la carpeta de inicio y me permitió ftp a la carpeta www, solo. Parece bueno hasta ahora, pero tal vez otros puedan sonar ...
moodboom
0

Denyhosts es otra herramienta además de las mencionadas por "jtd" que es posible que desee ver. Puede bloquear automáticamente intentos repetidos de conexión a su servidor SSH. Está disponible para instalar en los repositorios de Ubuntu.

firefly2442
fuente
Paket denyhosts solo está disponible para lúcido (10.04LTS) y preciso (12.04LTS). packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB
Denyhosts ya no está disponible en los repositorios de Ubuntu, aunque todavía se puede instalar con un método diferente, pero no se ha actualizado desde hace mucho tiempo. Por lo tanto, no es aconsejable utilizar Denyhosts.
Faizan Akram Dar
0

Limite el acceso al usuario

Aquí, solo permitiremos que el usuario realice la transferencia de archivos y desactivaremos el acceso a la terminal.

Para eso, agregue los siguientes códigos en la parte inferior del archivo de configuración.

$ sudo nano /etc/ssh/sshd_config

Ahora el archivo se abrirá y pegará el código.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Reemplace filemgcon su nombre de usuario. Luego guarde y cierre el archivo.

Eso es.

Referencia: Cómo usar SFTP en Ubuntu 16.04

Animal
fuente