Este tutorial explica cómo configurar y usar un servidor SFTP en CentOS. Antes de comenzar, permítanme explicar qué representa realmente SFTP y para qué se utiliza. Actualmente, la mayoría de la gente sabe que podemos usar FTP normal para transferir, descargar o cargar datos de un servidor a un cliente o de un cliente a un servidor. Pero este protocolo es pirateado fácilmente (si no se usa TLS) por intrusos anónimos, ya que los puertos están abiertos para cualquiera. Por lo tanto, se ha introducido SFTP como otra alternativa para cumplir con el objetivo principal de fortalecer el nivel de seguridad.
SFTP significa Protocolo de transferencia de archivos SSH o Protocolo seguro de transferencia de archivos. Utiliza un protocolo separado empaquetado con SSH para proporcionar una conexión segura.
1. Nota Preliminar
Para este tutorial, estoy usando CentOS 7 en la versión de 64 bits. Los mismos pasos también funcionarán en CentOS 6. El resultado del tutorial mostrará cómo se puede proporcionar a un cliente acceso al servidor SFTP pero no puede iniciar sesión en el servidor mediante SSH.
2. Instalación de SFTP
A diferencia del FTP normal, no es necesario instalar paquetes adicionales para usar SFTP. Solo requerimos el paquete preconstruido SSHd que ya se instaló durante la instalación en el servidor. Por lo tanto, solo verifique para confirmar si ya tiene el paquete SSH requerido. A continuación se muestran los pasos:
Ejecutar:
rpm -qa|grep ssh
La salida debería ser similar a esta:
[[email protected] ~]# rpm -qa|grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-7.4p1-13.el7_4.x86_64
openssh-server-7.4p1-13.el7_4.x86_64
openssh-clients-7.4p1-13.el7_4.x86_64
Eso es todo, ahora pasaremos a cómo hacer la configuración de SFTP.
3. Configuración SFTP
Una vez que se hayan completado todos los requisitos previos de la instalación, pasaremos a la fase de configuración. Para las mejores prácticas, necesitamos crear un grupo y un usuario para que podamos administrar todos los usuarios que obtendrán acceso SFTP. Pero primero, creemos una carpeta adicional llamada datos. A continuación se muestran los pasos:
mkdir -p /data/sftp
chmod 701 /data
Básicamente, lo que estoy tratando de hacer con el paso anterior es obtener una carpeta separada como directorio principal para el acceso SFTP. Todos los directorios de usuarios para los usuarios de SFTP serán subdirectorios de esta carpeta de datos.
Vamos a crear un grupo para el usuario SFTP, a continuación se muestran los pasos:
groupadd sftpusers
Luego cree un usuario 'howtoforge' y asígnelo al grupo SFTPUSERS. A continuación se muestran los pasos:
useradd -g sftpusers -d /upload -s /sbin/nologin mysftpuser
passwd mysftpuser
Changing password for user mysftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
A continuación se muestra la explicación de los comandos anteriores:
- Creo un usuario e incluyo al usuario en el grupo sftpusers usando el comando -g.
- Asigno el directorio principal para que el usuario esté en el directorio /upload configurando el comando -d /upload. Esto significa que más adelante la carpeta /upload estará en /data/mysftpuser/upload.
- Limito el acceso al shell /sbin/nologin para garantizar que el usuario solo pueda usar el protocolo SFTP, no SSH.
- Nombro al usuario "mysftpuser".
- Establecer contraseña para el usuario "mysftpuser".
Ahora vamos a crear la carpeta /upload en /data/mysftpuser, luego asigne la propiedad adecuada a la carpeta.
mkdir -p /data/mysftpuser/upload
chown -R root:sftpusers /data/mysftpuser
chown -R mysftpuser:sftpusers /data/mysftpuser/upload
Una vez hecho esto, verifique que la nueva carpeta en el directorio /data existe y que hicimos la configuración correcta.
[[email protected] ~]# ls -ld /data/
drwx-----x. 5 root root 54 Mar 22 14:29 /data/
[[email protected] ~]# ls -ld /data/mysftpuser
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/mysftpuser
[[email protected] ~]# ls -ld /data/mysftpuser/upload
drwxr-xr-x. 2 mysftpuser sftpusers 6 Mar 22 14:29 /data/mysftpuser/upload
[[email protected] ~]# cat /etc/passwd|grep mysftpuser
mysftpuser:x:1001:1001::/upload:/sbin/nologin
Ahora configure el protocolo SSH para crear un proceso SFTP. Esto se puede hacer editando el archivo de configuración en /etc/ssh/sshd_config. A continuación se muestran los pasos:
nano /etc/ssh/sshd_config
Agregue las siguientes líneas al final del archivo.
Match Group sftpusers
ChrootDirectory /data/%u
ForceCommand internal-sftp
Una vez que haya terminado, reinicie los servicios SSH, a continuación se muestran los pasos:
service sshd status
Redirecting to /bin/systemctl status sshd.service
? sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-03-22 14:21:38 CET; 16min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 942 (sshd)
CGroup: /system.slice/sshd.service
??942 /usr/sbin/sshd -D
Mar 22 14:21:37 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
Mar 22 14:21:38 localhost.localdomain sshd[942]: Server listening on 0.0.0.0 port 22.
Mar 22 14:21:38 localhost.localdomain sshd[942]: Server listening on :: port 22.
Mar 22 14:21:38 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
Mar 22 14:21:49 localhost.localdomain sshd[1375]: Accepted password for root from 192.168.1.9 port 59465 ssh2
service sshd restart
[[email protected] ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
4. Probando SFTP
Ahora que todo está configurado, hagamos una prueba para asegurarnos de que la configuración cumpla con nuestro propósito.
Accederé a SFTP usando otro servidor llamado TEST01. Primero, verificaré el puerto del servidor SFTP. Para hacer eso, usaré la función nmap. Si su servidor cliente no lo tiene, puede descargarlo e instalarlo con yum como se muestra a continuación:
yum list nmap
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.copahost.com
* epel: mirror.imt-systems.com
* extras: mirror.imt-systems.com
* remi-php72: remi.mirror.wearetriple.com
* remi-safe: remi.mirror.wearetriple.com
* updates: ftp.rz.uni-frankfurt.de
Available Packages
nmap.x86_64 2:6.40-7.el7
yum install nmap -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.copahost.com
* epel: mirror.imt-systems.com
* extras: mirror.imt-systems.com
* remi-php72: remi.mirror.wearetriple.com
* remi-safe: remi.mirror.wearetriple.com
* updates: ftp.rz.uni-frankfurt.de
Resolving Dependencies
--> Running transaction check
---> Package nmap.x86_64 2:6.40-7.el7 will be installed
--> Processing Dependency: nmap-ncat = 2:6.40-7.el7 for package: 2:nmap-6.40-7.el7.x86_64
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-7.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================================================
Installing:
nmap x86_64 2:6.40-7.el7 base 4.0 M
Installing for dependencies:
nmap-ncat x86_64 2:6.40-7.el7 base 201 k
Transaction Summary
=============================================================================================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 4.2 M
Installed size: 17 M
Downloading packages:
(1/2): nmap-ncat-6.40-7.el7.x86_64.rpm | 201 kB 00:00:01
(2/2): nmap-6.40-7.el7.x86_64.rpm | 4.0 MB 00:00:14
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 300 kB/s | 4.2 MB 00:00:14
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 2:nmap-ncat-6.40-7.el7.x86_64 1/2
Installing : 2:nmap-6.40-7.el7.x86_64 2/2
Verifying : 2:nmap-ncat-6.40-7.el7.x86_64 1/2
Verifying : 2:nmap-6.40-7.el7.x86_64 2/2
Installed:
nmap.x86_64 2:6.40-7.el7
Dependency Installed:
nmap-ncat.x86_64 2:6.40-7.el7
Complete!
[[email protected] ~]# nmap -n 192.168.1.100
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-22 14:51 CET
Nmap scan report for 192.168.1.100
Host is up (0.000016s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
Notará que actualmente en nuestro servidor SFTP, el único puerto abierto es SSH 22. Ahora, intentemos acceder al servidor SFTP (IP:192.168.1.100 en mi caso) desde el cliente TEST01. A continuación se muestran los pasos:
[[email protected] /]# sftp [email protected]
[email protected]'s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp>
¡Estupendo! Ahora nuestro servidor SFTP es accesible desde el exterior. Tenga en cuenta que el directorio predeterminado es /upload. Esto significa que SFTP solo mostrará la ruta predeterminada como /upload aunque nuestra configuración anterior realizada en el directorio del servidor SFTP sea /data/mysftpuser/upload.
Ahora intentemos obtener un archivo del directorio del servidor SFTP en nuestro cliente de prueba. Primero, creemos un archivo de prueba en /data/mysftpuser/upload. A continuación se muestran los pasos:
cd /data/mysftpuser/upload
touch testing_file.txt
Luego regrese a nuestro sitio de prueba TEST01 y vea si podemos obtener y descargar el archivo creado.
[[email protected] /]# sftp [email protected]
[email protected]'s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp> ls
testing_file.txt
sftp> get testing_file.txt
Fetching /upload/testing_file.txt to testing_file.txt
sftp> quit
¡Excelente! Nuestra prueba SFTP ha sido exitosa, intentemos acceder a SSH usando el usuario mysftpuser. Como anteriormente, establecimos la configuración como /sbin/nologin, por lo tanto, el usuario no podrá usar los servicios SSH:
[[email protected] ~]# ssh [email protected]
[email protected]'s password:
This service allows sftp connections only.
Connection to 192.168.1.100 closed.
¡Lindo! Ahora tenemos un servidor SFTP seguro en funcionamiento.