Después de la lectura de este post, los lectores sabrán que es un servidor SFTP, las ventajas que nos da respecto un servidor FTP, los usos que pueden dar a un servidor SFTP y finalmente aprenderán a crear y configurar su propio servidor SFTP.

¿QUÉ ES UN SERVIDOR SFTP?

Un servidor SFTP es aquel que utiliza el protocolo de red SFTP para establecer una conexión segura entre servidor y cliente con la finalidad de transferir y modificar archivos y carpetas de forma segura entre cliente y servidor. El medio del que se vale el protocolo SFTP para conseguir una conexión y transmisión segura entre cliente y servidor acostumbra a ser SSH.

No se debe confundir un servidor SFTP con un servidor FTP. Aunque ambos servidores tienen la misma utilidad, el protocolo SFTP es completamente diferente e independiente del protocolo FTP. Los protocoles SFPT y FTP no tienen relación alguna entre ellos. Si precisan información adicional sobre el protocolo SFTP pueden consultar el siguiente enlace.

VENTAJAS DE UN SERVIDOR SFTP RESPECTO A UN FTP

Las 2 principales ventajas que el servidor SFTP ofrece sobre un servidor FTP son las siguientes:

  1. En un servidor SFTP, el proceso de autentificación entre el cliente y el servidor se realiza con una capa de cifrado. Por lo tanto nadie debería poder averiguar nuestro usuario y nuestra contraseña de forma sencilla.
  2. En un servidor SFTP, la totalidad de información y tráfico que se envía entre el cliente y el servidor está cifrado. Por lo tanto un atacante no podrá interceptar ni modificar la información que se transmite entre el cliente y el servidor.

En contraposición con un servidor FTP, un servidor SFTP es un medio excelente y seguro para la transferencia de datos locales o remotos.

Nota: En este apartado solo comento las principales ventajas del servidor SFPT respecto al FTP. En cuanto a inconvenientes, pienso que prácticamente no hay ninguno. Si hay que buscar alguno podemos decir que a día de hoy hay apps de teléfono o software que no permiten conectarnos a servidores SFTP. No obstante parece que Windows 10 soportará el protocolo de encriptación SSH. Sin duda esto ayudará que se extienda el uso de este protocolo.

USOS QUE PODEMOS DAR A UN SERVIDOR SFTP

Usos comunes que hoy en día se acostumbran a dar a los servidores SFTP son los que se describen a continuación:

  1. Una solución corporativa para transferir archivos de gran tamaño de forma segura a los clientes, a los diseñadores gráficos, a los empleados, etc.
  2. Una solución segura para subir información y realizar copias de seguridad en un servidor Web.
  3. Crear nuestra propia nube personal para almacenar información. De este modo estemos donde estemos podemos acceder a nuestra información almacenada en nuestro servidor y no dependemos de servicios que puedan comprometer nuestra privacidad como Google Drive, Dropbox, iCloud etc.

CARACTERÍSTICAS DEL SERVIDOR SFTP QUE VAMOS A INSTALAR Y CONFIGURAR

Las principales características del servidor que vamos a instalar y configurar son las siguientes:

  1. El servidor será accesible de forma local y de forma remota. No tiene mucho sentido que un servidor SFTP únicamente esté accesible de forma local.
  2. Por cuestiones obvias de seguridad el servidor estará enjaulado. Por lo tanto los usuarios que accedan al servidor sftp, solo tendrán acceso a las carpetas que nosotros queramos.
  3. Controlaremos los permisos que tendrán los usuarios que accedan a nuestro servidor SFTP. Por lo tanto podremos seleccionar si los usuarios del servidor tienen permisos lectura, escritura y ejecución.
  4. El proceso de autentificación será mediante usuario y contraseña. Si lo deseamos también seria posible implementar un sistema de autenticación de dos factores mediantes contraseñas y claves SSH.
  5. El servidor ftp que configuraremos en este post dispondrá únicamente de 2 clientes. Vosotros podéis configurar los clientes que queráis.
  6. En el caso de usar un cliente adecuado, los clientes serán capaces de modificar los permisos de los archivos que suben al servidor SFTP.

¿QUÉ NECESITAMOS PARA MONTAR NUESTRO SERVIDOR?

Para seguir los pasos de este tutorial no necesitamos prácticamente nada. Simplemente necesitamos un simple ordenador con un sistema operativo Linux que actuará de servidor.

ASEGURAR QUE EL SERVIDOR SFTP TENGA IP LOCAL FIJA

Es muy importante asegurar que nuestro servidor SFTP disponga de una IP interna fija en la red local. El motivo de esta afirmación es simple. Sí la IP del servidor es dinámica, nuestro servidor no estará localizable porqué no sabremos cual es su IP.

Para conseguir disponer de un servidor con ip interna fija tan solo hay que seguir los pasos que se detallan en el siguiente enlace:

https://geekland.eu/configurar-ip-fija_o_estatica_ipv4/

Nota: El método descrito en el enlace es válido en el caso que estéis usando un servidor sin entorno gráfico. En el caso que el servidor que uséis disponga de entorno gráfico tendréis que configurar este aspecto a través de las interfaces visuales de vuestro gestor de red que probablemente será network manager o wicd.

Una vez terminados la totalidad de pasos mi servidor tendrá una IP fija que en mi caso será la 192.168.1.188. Esta IP es la que deberemos usar para localizar y conectar con nuestro servidor SFTP de forma local. Esta también será la IP que tenemos que usar para que nuestro Router redireccione las peticiones de los clientes SFTP remotos al servidor SFTP.

HACER QUE NUESTRO SERVIDOR SFTP ESTE ACCESIBLE DESDE EL EXTERIOR

Cuando tengamos nuestro servidor SFTP funcionando, lo más probable es que tengamos clientes remotos que quieran conectarse a nuestro servidor SFTP.

Los clientes remotos necesitaran nuestra IP Pública para poderse conectar al servidor SFTP. Desafortunadamente en la gran mayoría de casos la IP que tenemos es dinámica. Por lo tanto se puede dar perfectamente el caso que en el momento de conectarnos no sepamos la IP Pública de nuestro servidor.

Para solucionar este problema tenemos que asociar la IP Pública de nuestro servidor a un dominio. Para poder realizar este paso tan solo tienen que seguir las indicaciones del siguiente enlace:

https://geekland.eu/encontrar-servidor-con-dns-dinamico/

Una vez realizados estos pasos tendréis vuestra IP Pública asociada a un dominio. En mi caso mi IP Pública está asociada al dominio geekland.sytes.net

LOGUEARNOS COMO USUARIO ROOT

Todo el proceso de instalación y configuración del servidor se realizará siendo root. Por lo tanto el primer paso es loguearnos como usuario root. Para ello en la terminal ejecutamos el siguiente comando:

su root

Al ejecutar el comando nos preguntaran la contraseña del usuario root. La introducimos y presionamos Enter.

INSTALAR EL SERVIDOR SFTP

El segundo paso para disponer de nuestro servidor SFTP es asegurar que tengamos la totalidad de paquetes necesarios instalados. Para ello abrimos una terminal y ejecutamos el siguiente comando para actualizar los repositorios de nuestro sistema operativo:

apt-get update

Seguidamente tenemos que instalar los paquetes openssh-server y openssh-client. Para ello ejecutamos el siguiente comando en la terminal:

apt-get install openssh-server openssh-client
Nota: La mayoría de distros linux instalan los paquetes openssh-server y openssh-client en el momento de la instalación de la distro. Por lo tanto es posible que ya tengan estos paquetes previamente instalados.
Nota: En caso de usar un gestor de paquetes diferente a apt-get, deberán adaptar los comandos de este apartado al gestor de paquetes correspondiente.

CREACIÓN DE LAS CARPETAS EN LAS QUE LOS CLIENTES UBICARAN LA INFORMACIÓN

Seguidamente hay que crear las carpetas en las que los clientes del servidor SFTP ubicarán su información.

En mi caso he decidido que la totalidad de información del servidor SFTP se almacene en la ubicación /home/sftpserver. Por lo tanto el primer paso es crear la carpeta sftpserver dentro de la ubicación home ejecutando el siguiente comando en la terminal:

mkdir /home/sftpserver

Seguidamente, dentro de la ubicación /home/sftpserver creamos una carpeta para cada uno de los usuarios del servidor SFTP. Como los usuarios son jccall80 y ramon, hay introducir los siguientes comandos en la terminal para crear las carpetas:

mkdir /home/sftpserver/jccall80
mkdir /home/sftpserver/ramon

A continuación, dentro de cada una de las carpetas de los usuarios, crearé otra serie de carpetas para que el usuario del servidor SFTP pueda almacenar sus archivos y su información. Para ello hay que ejecutar los siguientes comandos en la terminal:

mkdir /home/sftpserver/jccall80/archivos
mkdir /home/sftpserver/jccall80/compartir
mkdir /home/sftpserver/ramon/archivos
mkdir /home/sftpserver/ramon/compartir

CREAR UN GRUPO QUE CONTIENE LA TOTALIDAD DE USUARIOS DEL SERVIDOR SFTP

En mi caso he decidido crear un grupo llamado SFTP que contendrá la totalidad de usuarios del servidor SFTP. Para crear el grupo tenemos que teclear el siguiente comando en la terminal:

groupadd sftpserver

El hecho de crear un grupo que contenga la totalidad de usuarios del servidor SFTP nos será de gran utilidad a la hora de configurar los permisos y enjaular a los usuarios de nuestro servidor.

CREAR LOS USUARIOS Y EL GRUPO DE NUESTRO SERVIDOR SFTP

Una vez creado el grupo sftpserver, ahora hay que crear los usuarios de nuestro servidor SFTP. Para crear un usuario, que en mi caso será jccall80, es necesario teclear y ejecutar el siguiente comando en la terminal:

useradd -g sftpserver -s /bin/false -d /home/sftpserver/jccall80 jccall80

El significado de cada una de las partes del comando que acabamos de ejecutar es el siguiente:

useradd: Comando principal empleado para la creación de un usuario.

-g sftpserver: Para indicar que el usuario que estamos creando pertenece al grupo sftpserver.

-s /bin/false: Para definir que el usuario del servidor SFTP que estamos creando, no tenga acceso a la terminal o interprete de comandos. Este aspecto es importante por temas de seguridad, ya que si un usuario del servidor tuviera acceso al interprete de comandos, podría ejecutar comandos que podrían comprometer la seguridad de nuestro servidor.

-d /home/sftpserver/jccall80: Para indicar la ruta home por defecto del usuario que estamos creando para el servidor SFTP.

jccall80: Es el nombre del usuario que queremos crear.

Del mismo modo que hemos creado el usuario jccall80, también crearemos el usuario ramon ejecutando el siguiente comando en la terminal:

useradd -g sftpserver -s /bin/false -d /home/sftpserver/ramon ramon

CREAR UN PASSWORD PARA CADA USUARIO

Seguidamente asignaremos un password a los usuarios que acabamos de crear. Para asignar un password al usuario jccall80 abriremos una terminal y ejecutaremos el siguiente comando:

passwd jccall80

El significado de este comando es el siguiente:

passwd: Comando para fijar o modificar la contraseña de un usuario.

jccall80: Es el usuario el cual queremos cambiar/definir su contraseña.

Después de ejecutar el comando, se nos preguntará 2 veces el password que queremos que tenga el usuario. Lo introducimos, presionamos Enter y el proceso ha terminado.

Del mismo modo que hemos generado el password para usuario jccall80, también generaremos un password para el usuario ramon introduciendo el siguiente comando en la terminal:

passwd ramon

ASIGNAR UN USUARIO Y UN GRUPO A LAS CARPETAS DEL SERVIDOR SFTP

A estas alturas ya hemos creado los grupos y los usuarios de nuestro servidor SFPT. El siguiente paso será definir el grupo y el usuario al que pertenecen cada una de las carpetas de los usuarios del servidor SFTP.

Las carpetas /home/sftpserver/jccall80/archivos y /home/sftpserver/jccall80/compartir, queremos que pertenezcan el usuario jccall80 y al grupo sftpserver. Para ello ejecutamos los siguientes comandos en la terminal:

chown jccall80:sftpserver /home/sftpserver/jccall80/archivos
chown jccall80:sftpserver /home/sftpserver/jccall80/compartir

El significado de cada uno de los parámetros del comando son los siguientes:

chown: Es el comando usado para modificar los permisos de archivos y carpetas.

jccall80:sftpserver: jccall80 es el nombre usuario al que queremos que pertenezca la carpeta jccall80. Sfptserver es el grupo al que queremos que pertenezca la carpeta jccall80

/home/sfptserver/jccall80/archivos: Es la ruta de la carpeta la cual queremos modificar el grupo y el usuario.

Las carpetas /home/sftpserver/ramon/archivos y /home/sftpserver/ramon/compartir, queremos que pertenezcan el usuario ramon y al grupo sftpserver. Para ello ejecutamos los siguientes comandos en la terminal:

chown ramon:sftpserver /home/sftpserver/ramon/archivos
chown ramon:sftpserver /home/sftpserver/ramon/compartir

Finalmente queremos que las carpetas /home/sftpserver, /home/sftpserver/jccall80 y /home/sftpserver/ramon pertenezcan al usario root y al grupo root. Por lo tanto ejecutaremos los siguientes comandos en la terminal:

chown root:root /home/sftpserver
chown root:root /home/sftpserver/jccall80
chown root:root /home/sftpserver/ramon
Nota: Es absolutamente indispensable que las carpetas /home/sftpserver, /home/sftpserver/jccall80 y home/sftpserver/ramon pertenezcan al usuario root. En caso contrario seria completamente imposible enjaular a los grupos o a los usuarios del servidor sftp. El propietario del directorio que usamos como jaula tiene que ser siempre root, y los permisos de la carpeta tienen que ser 755.

ASIGNAR PERMISOS A LAS CARPETAS DEL SERVIDOR SFTP

En apartados anteriores hemos creado las carpetas de nuestro servidor SFTP. A estas carpetas tenemos que asignarles los permisos que más nos convengan.

En mi caso quiero que las carpetas jccall80/archivos y ramon/archivos solo sean accesibles/modificables por sus propietarios, que son jccall80 y ramon respectivamente. Para ello introduciré los siguientes comandos en la terminal:

chmod 700 /home/sftpserver/jccall80/archivos
chmod 700 /home/sftpserver/ramon/archivos

Asignando los permisos 700, la carpeta jccall80/archivos únicamente será accesible y modificable por parte del usuario jccall80, y la carpeta ramon/archivos únicamente será accesible y modificable por el usuario ramón. El resto de usuarios no dispondrán de ningún permiso sobre estas carpetas. Por lo tanto asignar estos permisos es ideal para mantener la información de los usuarios del servidor privada.

También quiero que cualquier usuario pueda acceder y visualizar el contenido de las carpetas jccall80/compartir y ramon/compartir, y que únicamente los propietarios de la carpetas jccall80/compartir y ramon/compartir puedan modificar su contenido. Para conseguir este propósito ejecutaré los siguientes comandos en la terminal:

chmod 755 /home/sftpserver/jccall80/compartir
chmod 755 /home/sftpserver/ramon/compartir

Asignando los permisos 755 a estas carpetas, cualquier usuario podrá entrar en la carpeta jccall80/compartir y ramon/compartir y visualizar los archivos que hay dentro de esta ubicación, pero solo el propietario podrá crear, eliminar y modificar archivos. Por lo tanto estos permisos son ideales para compartir información con otros usuarios del servidor SFTP.

Finalmente tenemos que asignar, sí o sí, los permisos 755 a las carpetas /home/sftpserver, home/sftpserver/jccall80 y home/sftpserver/ramon. Para ello ejecutamos los siguientes comandos en la terminal:

chmod 755 /home/sftpserver/jccall80
chmod 755 /home/sftpserver/ramon
chmod 755 /home/sftpserver

Estas 3 carpetas deben tener los permisos 755, ya que en caso contrario, seria imposible enjaular a los usuarios del servidor SFTP. Recordamos de nuevo que el propietario del directorio que usamos como jaula debe ser root, y los permisos de la carpeta que usamos como jaula tienen que ser 755

ENJAULAR A LOS USUARIOS DEL SERVIDOR SFTP

Para enjaular a los usuarios disponemos de 2 opciones. Enjaular usuario por usuario, o enjaular a un grupo entero de usuarios. Únicamente podéis seleccionar una de las 2 opciones.

Opción 1: Enjaular a un grupo de usuarios

Si estáis leyendo este apartado es porqué habéis decidido enjaular a un grupo de usuarios. Para enjaular a un grupo de usuarios hay que modificar la configuración del fichero sshd_config. Antes de realizar cualquier modificación en la configuración de este fichero, realizaremos una copia del fichero ejecutando el siguiente comando en la terminal:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Una vez realizada la copia de seguridad ya se puede editar el fichero de configuración introduciendo el siguiente comando en la terminal:

nano /etc/ssh/sshd_config

Después de ejecutar el comando se abrirá el editor de texto nano con el contenido del fichero sshd_config.

En el fichero de configuración tenemos que buscar la siguiente línea:

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

Una vez encontrada, la comentamos introduciendo # al inicio de la línea. Por lo tanto quedará de la siguiente forma:

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

Para enjaular al grupo de usuarios del servidor, tenemos que ir al final del fichero de configuración e introducir los siguientes parámetros:

Subsystem sftp internal-sftp
Match group sftpserver
ChrootDirectory /home/sftpserver
ForceCommand internal-sftp
Nota: Únicamente hay que modificar las partes del código que están en color rojo. En el comando Match Group hay que poner el nombre del grupo que queremos enjaular que en mi caso es sftpserver. En el comando ChrootDirectory, tenemos que indicar la ubicación en que queremos enjaular a los usuarios que forman parte del grupo sftpserver.
Nota: Con esta configuración, los usuarios del servidor SFTP que pertenezcan al grupo sftpserver, solo podrán acceder al contenido de la carpeta /home/sftpserver en adelante.

Una vez realizados los cambios tan solo tenemos guardarlos y cerrar el fichero. Seguidamente tenemos que reiniciar el servidor SSH para que las modificaciones surjan efecto. Para reiniciar el servidor tecleando el siguiente comando en la terminal:

service ssh restart

Una vez reiniciado el servidor ssh, el servidor SFTP ya está plenamente operativo.

Opción 2: Enjaular usuario por usuario

Si estáis leyendo este apartado es porqué habéis decidido enjaular a cada uno de los usuarios de forma individual. Para enjaular a un usuario hay que modificar la configuración del fichero sshd_config. Antes de realizar cualquier modificación en la configuración de este fichero, realizaremos una copia del fichero ejecutando el siguiente comando en la terminal:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Una vez realizada la copia de seguridad ya se puede editar el fichero de configuración introduciendo el siguiente comando en la terminal:

nano /etc/ssh/sshd_config

Después de ejecutar el comando se abrirá el editor de texto nano con el contenido del fichero sshd_config.

En el fichero de configuración tenemos que buscar la siguiente línea:

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

Una vez encontrada, la comentamos introduciendo # al inicio de la línea. Por lo tanto quedará de la siguiente forma:

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

Para enjaular a los usuarios jccall80 y ramon, tenemos que ir al final del fichero de configuración e introducir el siguiente texto:

Subsystem sftp internal-sftp
Match user jccall80
ChrootDirectory /home/sftpserver/jccall80
ForceCommand internal-sftp
Match user ramon
ChrootDirectory /home/sftpserver/ramon
ForceCommand internal-sftp
Nota: Únicamente hay que modificar las partes del código que están en color rojo. En el comando Match user hay que poner el nombre del usuario que queremos enjaular. En el comando ChrootDirectory, tenemos que indicar la ubicación en que queremos enjaular cada uno de los usuarios.
Nota: Con esta configuración, el usuario jccall80 únicamente podrá acceder al contenido ubicado en la carpeta /home/sftpserver/jccall80 y en las carpetas de nivel superior a /home/sftpserver/jccall80. Por otra parte el usuario el usuario ramon solo podrá acceder al contenido ubicado en la carpeta /home/sftpserver/ramon y en las carpetas de nivel superior a /home/sftpserver/ramon.

Una vez realizados los cambios tan solo tenemos guardarlos y cerrar el fichero. Seguidamente tenemos que reiniciar el servidor SSH para que las modificaciones surjan efecto. Para reiniciar el servidor tecleamos el siguiente comando en la terminal:

service ssh restart

Una vez reiniciado el servidor ssh, el servidor SFTP ya está plenamente operativo.

FORTIFICAR NUESTRO SERVIDOR SFTP

Dentro del fichero de configuración etc/ssh/sshd_config, podemos modificar ciertos parámetros para fortificar la seguridad de nuestro servidor SFTP.

Quien esté interesado en este punto, tiene que saber que durante las próximas semanas escribiré un post en el que detallaré los parámetros que podemos modificar para fortificar nuestro servidor.

ELIMINAR GRUPOS USUARIOS Y EL GRUPO DEL SERVIDOR SFTP

Anteriormente hemos visto como crear un grupo y una serie de usuarios para nuestro servidor SFTP.

Si algún día precisamos borrar algún usuario del servidor SFTP lo podemos hacer de la siguiente forma:

Primero de todo instalamos el paquete members que nos servirá para ver los usuarios que tiene un determinado grupo. Para ello ejecutamos el siguiente comando en la terminal:

apt-get install members

Una vez dispongamos del paquete members instalado, tecleamos la palabra members seguida del nombre del grupo que contiene los usuarios del servidor SFTP en la terminal:

members sftpserver

Presionamos Enter y obtendremos la totalidad de usuarios del servidor SFTP. Seleccionamos el usuario que queremos borrar que en mi caso es ramon. Una vez seleccionado el usuario a borrar tan solo tenemos que ejecutar el siguiente comando en la terminal:

userdel -r ramon
Nota: La opción -r especifica que aparte de borrarse el usuario, también queremos que se borre el directorio home del usuario.

Una vez borrados todos los usuarios, si lo precisamos también podemos borrar el grupo sftpserver. Para ello tan solo tenemos que teclear el siguiente comando en la terminal:

groupdel sftpserver

CONECTARSE Y USAR EL SERVIDOR SFPT

Durante las próximas semanas escribiré una serie de post en el que detallaré que opciones tenemos para conectarnos a nuestro servidor SFTP. En los post detallaré como podemos usar nuestro servidor SFTP en prácticamente la totalidad de sistemas operativos existentes en la actualidad.

Únete a la conversación

82 comentarios

  1. Como siempre, un pedazo de entrada. Muy bien explicado lo del enjaulado. Alguna vez que he puesto en marcha un servidor de estos en casa me hacía la pitxaunlio y no me salía bien lo del chroot.

    No conocía la aplicación members. Siempre que he querido saber quienes estaban usando un servicio, lo medio intuía viendo en el archivo passwd quien pertenecía a que grupos.

    Eskerrik asko!

    1. Hola Mikel

      Gracias por el comentario. La clave del chrootdirectory, es que la ruta tiene que pertenecen al usuario root y tener los permisos 755. Quizás el problema venia por este lado.

      Saludos!

  2. Excelente artículo de nuevo Joan. Permite aprovechar las virtudes de SSH, con algo extremadamente útil.

    1. Gracias a ti y Asrafil por vuestro comentarios. Parece que este post ha gustado a la gente.

  3. Un gran documento, le felicito, los tutoriales como este universalizan Linux, necesitamos que mas gente entienda que podemos aprovechar las enormes ventajas de no depender de Windows. Mil Gracias

  4. Perfecto. Muy bien explicado y documentado.

    Solamente una duda. Después de seguir paso a paso el tuto y funcionar todo perfectamente, ahora no me deja entrar a los usuarios creados, ni a los anteriores (excepto root), para hacer scp y rsync por ssh.

    Me gustaría poder aprovechar las características de enjaulado solo a usuarios para tareas de scp y rsync, pero no me lo permite, aunque sí ftps como bien indica el tutorial.

    ¿Se puede hacer algo para ampliarlo a estas dos utilidades?.

    Supongo que el tema estará en lo configuración desde el archivo sshd_config

    Muchas gracias por todo.

    1. Hola José

      Si quieres usar rsync o scp entonces es tan simple como crear un usuario que tenga privilegios para hacer esto. En mi caso en el tutorial por temas de seguridad no doy acceso a la terminal al usuario que creo y por esto no puedes usar ni rsync, ni ssh, ni scp, etc.

      Saludos

      1. Muchas gracias por contestar Joan.

        Llegué a esta web (que seguiré a partir de ahora) buscando una solución tan concreta como crear usuarios en linux que me permitan volcar o recuperar archivos (copias de seguridad) desde otros sistemas.

        Para ello creo usuarios estándar en Ubuntu que usan el scp y rsync desde otros sistemas y me funciona perfectamente, el problema es que el usuario que creo para ello permite hacer cosas que yo no quiero, como por ejemplo navegar por las carpetas del sistema o de otros usuarios.

        Lo único que quiero son usuarios enjaulados en su carpeta y que NO tengan acceso a terminal por ssh ni a otras utilidades que permitan hacer mas cosas que copiar archivos desde el exterior (con rsync o scp desde protocolo ssh).

        Eso esto.

        Gracias por todo y ánimo para continuar con esta fantástica web.

        1. Hola José

          Me alegro que te guste el blog. Veo que aún sigues con el problema que comentabas. Ya te conteste en mi primera respuesta. Tienes que seguir exactamente los mismos pasos que detallo cambiando esto:

          useradd -g sftpserver -s /bin/false -d /home/sftpserver/jccall80 jccall80

          por esto:

          useradd (nombre del usuario que quieras que en mi caso seria jccall80)

          Con esto debería ser funcional.

          Saludos

  5. Mil gracias por el tutorial, es de mucha ayuda. Tengo una duda, ¿cómo podrán entrar otros usuarios a los directorios Compartir de los dos usuarios del ejemplo si están enjaulados? Gracias.

    1. La respuesta es fácil. En función de como enjaules a cada usuario o cada grupo. Si dos usuarios los enjaulas en la misma ubicación, los 2 podrán ver las mismas carpetas, pero en función de los permisos de cada una de las carpetas visibles los usuarios podrán o no acceder a ellas.

      Saludos

      1. Joan

        Gracias por tu pronta respuesta. Te comento mi escenario, cree 3 usuarios dentro del directorio enjaulado, pertenecen al mismo grupo, sin acceso al terminal, los 3 con un directorio Compartir respectivo, me conecto con Filezilla con alguno de los 3 usuarios y solo puedo ver los directorios personales y no puedo acceder al directorio Compartir de otro usuario y no lo puedo hacer por terminal porque no tienen acceso. Saludos cordiales.

        1. Hola Buenas,

          Ya te he respondido antes. Enjaula usuario por usuario y de esta forma puedes seleccionar lo que puede ver cada usuario y donde puede entrar. Otra solución es tal y como lo tienes poner una carpeta compartida en la raíz de tu jaula.

          Saludos

  6. Hola, estoy intentando enjaular a un usuario en sftp y ssh para que no pueda salir de su home.

    Comento lo de subsystem que indicas y luego debajo añado

    Subsystem sftp internal-sftp
    Match user miusuarioenjaulado
    ChrootDirectory /var/www/miusuarioenjaulado
    ForceCommand internal-sftp

    Cuando hago un service ssh restart y posteriormente un service ssh status me indica que SSH Failed (Code exited)

    Si reviso el syslog me dice:

    «/etc/ssh/sshd_config line 87: Directive ‘UsePAM’ is not allowed within a Match block»

  7. Buenas tardes.

    Primero de todo agradecer al gran tutorial, funciona fenomenal.

    Tengo un problema que no consigo resolver. Quiero montar un servidor sftp para compartir archivos con un grupo de usuarios, pero me gustaría crear una carpeta en la que todos los usuarios tengan permisos de lectura y escritura.

    Un saludo.

    1. Hola

      Lo único que tienes que realizar es asignar permisos de lectura y escritura a la carpeta que quieras. Por lo tanto en vez de usar los permisos 700 o 755 usas 777.

      Saludos

  8. Excelente. Funcionó de primera!.

    Habia intentado con pureftp y vsftp pero no lo conseguí y ahora con este tutorial seguramente los haria funcionar; al menos vsftp.

    Este tutorial me aclaro la confusion de manejo de permisos para un Server FTP. Comprobé su funcionamiento con Filezilla Cliente y todo OK!, así que ahora modificare mi cliente FTP que estoy programando para que funcione con SSH. Espero conseguirlo en breve. Gracias por tu valioso aporte. Un saludo

    1. Hola Miguel

      Gracias por reportar el buen funcionamiento. Has realizado lo más complicado. Configurar Filezilla, o acceder a través del gestor de archivos, verás que es muy fácil.

      Saludos

  9. Excelente explicación.

    Con lujo de detalles!

    Muchísimas gracias, sacas del suplicio a muchos estudiantes!

    1. Hola

      ¿A que te refieres con UNIX?

      Lo pregunto porque a día de hoy no existen un sistema operativo UNIX llamado como tal que sea operativo. Unix como marca puede hacer referencia a muchos sistemas operativos y si no estoy equivocados hay sistemas operativos de la familia Unix y sistemas operativos que descienden de la primera versión.

      Saludos

  10. Hola, excelente artículo.

    Quiero saber si es posible permitir usuarios anónimos, supongo que solo es dar permisos o no?

    1. Hola

      No entiendo a que te refieres con crear un usuario anónimo. No lo entiendo porque si ahora mismo te creara una cuenta en el servidor del post… para mi serías anónimo.

      Saludos.

  11. Hola.

    Completa explicación. Excelente.

    He llegado a esta web buscando cierta configuración que no tengo muy claro como llevar a cabo.

    Sería casi lo mismo que lo explicado en el artículo, salvo que el usuario creado quiero que tenga acceso a dos carpetas, situadas cada una de ellas en otros discos duros.

    Entonces, en el disco uno, estaría el SO, y dejaría /home.

    En los discos dos y tres, ya me pierdo un poco que he de hacer para conseguir lo que quiero.

    ¿Alguna sugerencia?

    Gracias por adelantado.

    1. Hola Alejandro

      No he realizado nunca lo que te propones, pero entiendo que lo que quieres hacer lo podrás realizar mediante enlaces simbólicos y creando una jaula adicional para el segundo disco duro.

      Saludos y ya nos comentarás la experiencia.

      1. Gracias por la pronta respuesta.

        En cuanto tenga algo más de tiempo tengo previsto hacerlo así, y por supuesto, comentar el resultado.

        Saludos.

  12. Necesito crear una carpeta en un disco USB a la que puedan acceder los usuarios, pero con acceso solo a esa carpeta.

    Si pongo ChrootDirectory /media/discousb no me deja conectar por sftp. Si uso ChrootDirectory /media si, pero con acceso a todo el disco usb.

    Además, no me deja usar SSH key files para acceder, tiene que ser con usuario y contraseña.

    ¿Que debería hacer para dar acceso solo a esa carpeta del disco usb, y que se puedan conectar con key files?

    Saludos

  13. Hola excelente post

    Pero este ejercicio del enjaulado es funcional para Redhat Linux 9?

    Saludos y gracias

    1. Hola Josue

      Nunca he instalado Redhat Linux así que en mi caso no puedo responder a tu pregunta.

      La mejor solución a tu pregunta es que lo pruebes tu mismo porque no tengo claro que puedas obtener una respuesta rápida de otro lector de este post.

      Saludos y gracias por comentar.

  14. Tengo problemas al crear el susuario.

    Intento hacer pruebas de conexión y me da error, pero si utilizo el usuario root me funciona sin problemas.

  15. Amigo muy interesante el post y muy bien explicado .

    Soy nuevo en esto y estoy aprendiendo, quisiera saber como puedo conectarme y hacer uso del servidor SFTP… muchas gracias por tu ayuda..

    1. Hola Jaime,

      Lo puedes hacer de muchas forma. La que en principio es fácil para todo el mundo es usando Filezilla.

      Cuando encuentre el tiempo y la motivación para escribir sobre lo que preguntas lo haré.

      Saludos

  16. Hola soy nuevo en esto, he realizado muchas pruebas con este manual pero llego a lo mismo me ingreso por comando al sftp y al momento de mirar mi directorio me sale

    sftp> pwd
    Remote working directory: /

    Y al momento de listar el siguiente error

    sftp> ls
    Couldn't get handle: Permission denied

    No me puedo conectar con filezilla me sale el error recuperando el directorio.

    Gracias por su respuesta.

  17. Muchas gracias por el post, estaba buscando algo como esto para implementarlo en la empresa que aun usan ftp.

  18. Hola, Joan Carles.

    Soy novato en LINUX, pero el post me ha parecido perfecto para lo que necesito. Lo he configurado todo tal como está en el post, en un CENTOS 6.8. Al entrar con Filezilla, no hay problemas si entro como root, pero con los otros usuarios, me da fallo en la autentificación. ¿Se te ocurre que podría ser?

    Muchas gracias

  19. Excelente, muy bien explicado y funciona bien. Tengo servidores en debian y lo probé. Anda perfecto, muchas gracias por publicar esto.

  20. Lo he hecho todo igual y me aparece el siguiente error al reiniciar el servicio:

    Job for ssh.service failed because the control process exited with error code.
    See "systemctl status ssh.service" and "journalctl -xe" for details.

    Alguien me puede ayudar?? Estoy desesperado…

    1. Hola

      Haz lo que te dice el mensaje. Mira tu log de errores y allí encontrarás información sobre lo que está sucediendo.

      Si sigues los pasos correctamente no te saldrá el error que mencionas.

      Saludos

  21. Hola primero de todo muy buen post. Pero tengo un problema al querer iniciar sesión, por ejemplo con uno de los usuarios me pone el siguiente mensaje:

    Se está ignorando el archivo $HOME/.dmrc del usuario. Esto impide que se guarden la sesión predeterminada y el idioma. El archivo debería pertenecer al usuario y tener los permisos 644. El directorio personal del usuario debe pertenecer al usuario y no ser escribible para otros usuarios.

    Al dar «aceptar» en este mensaje me intenta iniciar sesión y me sale otra venta con el mensaje «el administrador del sistema a desactivado su cuenta».

    Espero que me puedas ayudar con este problemilla. Muchas gracias y un saludo

  22. Buen día,

    Excelente tutorial me funciono para montar un servidor para acá en la empresa en la que laboro, pero resulta que ahora me están haciendo un requerimiento y es que un usuario debe tener acceso a todas las carpetas del grupo y poder escribir en ellas no he podido crearlo ya que si lo hago el usuario queda como si pudiera ver todas las carpetas del sistema y por seguridad no podría dejarlo así, ¿cómo podría hacerlo?

    1. Hola

      Es muy raro lo que cuentas y por lo que dices dudo que hayas enjaulado a los usuarios. Así que cuando hayas enjaulado los usuarios entonces tan solo tienes que asignar los permisos correspondientes para que los usuarios hagan lo que tu quieras. Está todo detallado en el post.

      Saludos

  23. Gracias Joan por tu respuesta,

    Efectivamente como te mencionaba el sftp ya funciona y los usuarios están enjaulados, solo pueden ingresar a su respectiva carpeta, lo que necesito es crear un usuario dentro del grupo y que ese usuario cuando se conecte vía filezilla pueda ver todas las carpetas que están dentro del grupo y pueda entrar a cada una de ellas y poder modificar o borrar archivos.

    1. Hola,

      Lo que quieres hacer dudo que se pueda hacer. Si quieres hacer lo que dices tendrás que enjaular usuario por usuario o crear un usuario que no esté enjaulado y pueda navegar por la totalidad de carpetas del ordenador o servidor. También puedes crear un grupo de administradores.

      Saludos

  24. Hola,

    Muchas gracias por el post, me resulto de mucha utilidad y está perfectamente explicado.

    Te hago un consulta, una vez que está publicado el server, ¿Cómo se puede restringir el acceso con el usuario root desde internet? y que solo se pueda acceder con el usuario root desde la red privada.

    gracias!

    1. Hola

      Si no quieres que tu servidor sea público cierra el puerto SSH de Router y hagas ni configures ninguna cuenta de no-ip.

      Saludos

  25. Hola,

    En una máquina con Centos 6 he podido enjaular al usuario pero me surge el siguiente problema:

    Cuando me conecto con él lo primero que veo es el contenido de la carpeta del ChrootDirectory donde puedo ver las carpetas y ficheros en ese nivel pero no tengo permisos para escribir a no ser que entre a la carpeta del usuario que he enjaulado quien es propietario.

    [Ruta ChrootDirectory] /sftp (Al conectame con el usuario enjaulado veo esta carpeta primero)
    [Ruta del usuario enjaulado] /sftp/user (Y aqui entro y tengo permisos de escritura)

    La configuración del sshd:

    Subsystem sftp internal-sftp
    Match User user
    ChrootDirectory /sftp
    ForceCommand internal-sftp

    ¿No existe una manera para que el usuario pueda conectarse directamente a su carpeta [/sftp/user] sin obligarle a entrar a ella para escribir cada vez que se conecte?

    Saludos.

    1. hola debieras poner la variable de usuario es decir.

      Subsystem sftp internal-sftp
      Match User user
      ChrootDirectory /sftp/%u
      ForceCommand internal-sftp

  26. hola muy buen post y todo me funciono.

    Mi único detalle es después de todo esto como hago pruebas ya que soy novato… y quisiera saber como saber si me funciona o no…

    1. Hola Jako

      Desde hace mucho tiempo está pendiente la explicación que requieres. Intentaré escribir un post, pero no te puedo decir cuando.

      Saludos

  27. Muchas gracias por este excelente manual. No había podido resolver el problema de enjaular los usuarios ftp y con esta documentación lo logré.

  28. Muy bueno,

    Después de intentarlo infinidad de veces con otros tutoriales sin ningún éxito, con este tutorial todo va perfecto. Muchas gracias por el tiempo dedicado. Un saludo.

  29. Pues si estupendo, pero no ha dejado en ascuas, ¿dónde buscamos el siguiente manual como dice usted que mostrará ?

  30. La solución brindada para la creación se realiza de manera efectiva y el enjaulado se aplica pero solo por el puerto 22 (SFTP), pero si realizo la misma conexión por el puerto 21 (FTP) logra ir a archivos raíz.

    Se puede restringir que solo sea por el puerto 22 (SFTP) en el enjaulado que se hace en el archivo «sshd_config» o alguna otra alternativa.

    1. SSH únicamente permite conectarse por el puerto que tu indicas en el archivo de configuración.

      Si te conectas por otro puerto entonces es porque tendrás otro servidor ftp activo en tu ordenador. Si no quieres permitir conexiones por el puerto 21 desactiva el servidor que esté escuchando en el puerto 21 o bloquea su acceso a través del firewall.

      Saludos

  31. Al realizar la configuración solo puedo ingresar por puerto 22 con usuario root y no con el resto de los usuarios creados, me ayudas?

  32. Buenas, No se cuanto hace que creaste este tuto pero puedo decir que sigue vigente.

    Muy bien realizado bien explicado excelente

    gracias

    1. Hola Buenas

      El tutorial lo puedes aplicar sin problema y te debería funcionar. En cuanto a la fecha la puedes encontrar en el inicio del tutorial.

      Saludos

  33. Hola, excelente el tuto monte un servidor sftp en 10min, felicitaciones!!!

    Ahora tengo un inconveniente cuando ingreso desde la red local subo y bajo archivos sin problemas, cuando quiero conectarme desde afuera filezilla me tiera este error:

    Estado: Conectando a 181.xxx.xxx.162...
    Respuesta: fzSftp started, protocol_version=4
    Comando: open "dbruno@181.xxx.xxx.162" 22
    Comando: Confiar en nueva clave de host: Una vez
    Comando: Pass: **********
    Error: La autenticación falló.
    Error: Critical error: No se pudo conectar al servidor

    ¿Tienen idea qué puede ser?

    gracias de antemano

    Saludos!!

    1. Hola

      Se me ocurren 3 causas:

      La primera que introduzcas la contraseña mal.

      La segunda que tu router no esté bien configurado para que puedas acceder fuera de tu red local esté mal configurada.

      La tercera que el firewall de tu ordenador no permita las conexiones entrantes fuera de tu red local.

      Saludos

      1. Gracias Joan por tu respuesta, la contraseña esta bien porque solo cambiando la ip externa por una local me conecto. Con el Putty me pasa lo mismo. En local me conecto y externamente me rebota la contraseña. Debe ser algo d los usuarios, pero como soy medio novato en linux no le encuentro la vuelta.

        Gracias totales!!

        1. Hola,

          Tu problema no es con el usuario. Los problemas que puedes tener son los que te he comentado con anterioridad.

          Saludos

  34. Hola!

    Me ha encantado tu tutorial, me ha ayudado mucho. Tengo un problema con los archivos que subo. Cuando los subo tienen permisos 744 y necesito que todo lo que suba yo o mis compañeros tengan 755. Podemos cambiarlos pero sería mucho mejor hacerlo automáticamente ¿Hay alguna manera?

  35. hola amigo muy bien explicado, pero tengo una duda.

    He seguido el paso 2 para que esta enjaulado por usuario, pero intento conectarme por winSCP o Fillezilla por el puerto 22 con el usuario y contraseña pero no me permite el acceso. ¿Algo que falta que active o alguna forma para poder ingresar?

  36. Estimado, excelente paso a paso.

    Tengo una consulta, se puede configurar mas de un usuario a una misma casilla?

    Con el mismo ejemplo de /home/sftpserver/jccall80/archivos… puede tener acceso mas de un usuario?

  37. Gracias Joan, llevaba tiempo queriendo enjaular bien, por fin he podido hacerlo, solo una duda ya que solo me funciona en la ruta home,
    la idea sería usar un disco externo y quedaría algo así:

    /DISCO-EXTERNO/sftpserver/user1/archivos

    Así no me funciona y en principio creo todos los directorios y permisos correctamente.
    No se si aparte de este tutorial habría que cambiar alguna cosa más para poder usar un directorio diferente a /home,

    Gracias de nuevo y saludos

  38. Genial por lo claro de todo, solamente tengo una duda: ¿Puedo usar el enjaulado por grupos y usuarios al mismo tiempo?
    Saludos

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.