Configuración
Instalación del servicio SFTP
$ sudo apt-get install proftpd -y
Configuración:
Editar el archivo /etc/proftpd/proftpd.conf
sudo cp /etc/proftpd/proftpd.conf{,.bak}
sudo nano /etc/proftpd/proftpd.conf
Antes de editar es recomendable realizar un respaldo del archivo.
UseIPv6 on
(Si no se usará, es recomendable desactivarlo)
Modificar la linea UseIPv6
y cambiar on
a off
Comentar la linea Include /etc/proftpd/conf.d/
Descomentar la linea RequireValidShell off
Quedando de la siguiente manera :
...
UseIPv6 off
RequireValidShell off
# Include /etc/proftpd/conf.d/
...
La ultima modificacion es para desabilitar la carga del módulo del SFTP.
Crear y editar el siguiente archivo /etc/proftpd/conf.d/sftp.conf
sudo nano /etc/proftpd/conf.d/sftp.conf
Agregar el siguiente contenido:
#LoadModule mod_sftp.c
<IfModule mod_sftp.c>
SFTPEngine on
Port 22
SFTPLog /var/log/proftpd/sftp.log
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthorizedUserKeys file:~/.sftp/authorized_keys
SFTPCompression delayed
</IfModule>
Creacion de usuarios y permisos
sudo adduser usftp1
sudo chmod 700 /home/usftp1
Cambiando el permiso a
700
, solo el usuario al que le pertenece dicho directorio puede accesar y modificar su contenido.
Reiniciar los servicio ssh
y proftpd
sudo /etc/init.d/proftpd restart
Ó
sudo service proftpd restart
Opcional
Enjaular usuarios
Limitar a los usuarios solamente a su directorio home
CREAR UN GRUPO QUE CONTIENE LA TOTALIDAD DE USUARIOS DEL SERVIDOR SFTP
groupadd sftpserver
CREAR LOS USUARIOS Y agregarlos al GRUPO DE NUESTRO SERVIDOR SFTP
useradd -g sftpserver -s /bin/false -d /home/sftpserver/usuario1 usuario1
useradd -g sftpserver -s /bin/false -d /home/sftpserver/usuario2 usuario2
useradd: Comando principal empleado para la creación de un usuario. -g sftpserver: Para indicar que el usuario pertenezca 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/usuario1: Indica la ruta home por defecto del usuario que estamos creando para el servidor SFTP. usuario1: Es el nombre del usuario que queremos crear.
CREAR UNA CONTRASEÑA PARA CADA USUARIO
passwd usuario1
passwd usuario2
ASIGNAR UN USUARIO Y UN GRUPO A LAS CARPETAS DEL SERVIDOR SFTP
Las carpetas /home/sftpserver/usuario1/archivos
y /home/sftpserver/usuario1/compartir
, queremos que pertenezcan al usuario1
y al grupo sftpserver. Para ello ejecutamos los siguientes comandos en la terminal:
chown usuario1:sftpserver /home/sftpserver/usuario1/archivos
chown usuario1:sftpserver /home/sftpserver/usuario1/compartido
chown usuario2:sftpserver /home/sftpserver/usuario2/archivos
chown usuario2:sftpserver /home/sftpserver/usuario2/compartido
chown: Es el comando usado para modificar los permisos de archivos y carpetas. usuario1:sftpserver: usuario1 es el nombre usuario al que queremos que pertenezca la carpeta usuario1. Sfptserver es el grupo al que queremos que pertenezca la carpeta usuario1 /home/sfptserver/usuario1/archivos: Es la ruta de la carpeta la cual se desea modificar el grupo y el usuario.
Finalmente queremos que las carpetas /home/sftpserver, /home/sftpserver/usuario1 y /home/sftpserver/usuario2 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/usuario1
chown root:root /home/sftpserver/usuario2
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 usuario1/archivos y usuario2/archivos solo sean accesibles/modificables por sus propietarios, El resto de usuarios no dispondrán de ningún permiso sobre estas carpetas.
chmod 700 /home/sftpserver/usuario1/archivos
chmod 700 /home/sftpserver/usuario2/archivos
También que cualquier usuario pueda acceder y visualizar el contenido de las carpetas usuario1/compartir, y que únicamente los propietarios de la carpetas usuario1/compartir y usuario2/compartir puedan modificar su contenido. Para conseguir este propósito ejecutaré los siguientes comandos en la terminal:
chmod 755 /home/sftpserver/usuario1/compartido
chmod 755 /home/sftpserver/usuario2/compartido
Opcional: SI se desea que cualquiera puede tener el control de la carpeta compartido, para eliminar, editar, crear, aplicar todos los permisos
chmod 777 /home/sftpserver/usuario1/compartido chmod 777 /home/sftpserver/usuario2/compartido
Asignando los permisos 755 a estas carpetas, cualquier usuario podrá entrar en la carpeta usuario1/compartir y usuario2/compartir y visualizar los archivos que hay dentro de esta ubicación, pero solo el propietario podrá crear, eliminar y modificar archivos.
chmod 755 /home/sftpserver/usuario1
chmod 755 /home/sftpserver/usuario2
chmod 755 /home/sftpserver
Configuración en ssh
Realizar un respaldo del archivo a editar antes.
$ sudo cp /etc/ssh/sshd_config{,.bak}
$ sudo nano /etc/ssh/sshd_config
Buscar las siguientes lineas y comentarlo agregándole #
Quedando de la siguiente manera:
# Subsystem sftp /usr/lib/openssh/sftp-server
# UsePAM yes
Para enjaular a lo usuarios del grupo sftp
Subsystem sftp internal-sftp
Match group sftpserver
ChrootDirectory /home/sftpserver
ForceCommand internal-sftp
Para dirigir al usuario a su home sin acceder al de otros usuarios, editar la siguiente linea
ChrootDirectory /home/sftpserver/%u
Reiniciar el servicio ssh:
service ssh restart
Ó
sudo /etc/init.d/ssh [stop,start,restart]
Opcional:
Ejemplo: Para enjaular por usuario
Subsystem sftp internal-sftp
Match user usuario1
ChrootDirectory /home/sftpserver/usuario1
ForceCommand internal-sftp
Resolviendo errores:
Si algún usuario fue bloqueado usando la configuración
DenyUsers usuariobloqueado
DenyGroups grupobloqueado
Al aplicar esta configuración de sftp, todos los usuarios denegados o permitidos en la configuración ssh pueden acceder por ssh, excepto los que están en el grupo de sftpserver (el grupo creado en la configuración sftp), la configuración de ssh queda invalidada, la solución para seguir bloqueando al usuario por ssh es aplicar la siguiente configuración al final del siguiente archivo /etc/ssh/sshd_config
Abrir el archivo :
sudo nano /etc/ssh/sshd_config
Y bloquear de la siguiente manera, agregar la siguiente linea al final del archivo, asegurándose remplazar al usuario a bloquear
Match User USUARIObloquear,otroUsuarioABloquear
MaxSessions 0
Dejando el acceso a todos los demás excepto a los definidos en el Match User y los que pertenezcan al grupo sftpserver