Questo tutorial spiega come configurare e utilizzare un server SFTP su CentOS. Prima di iniziare, lascia che ti spieghi cosa rappresenta effettivamente SFTP e a cosa serve. Attualmente, la maggior parte delle persone sa che possiamo utilizzare il normale FTP per trasferire, scaricare o caricare dati da un server a un client o da un client a un server. Ma questo protocollo viene violato facilmente (se non viene utilizzato TLS) da intrusi anonimi poiché le porte sono aperte a chiunque. Pertanto, SFTP è stato introdotto come un'altra alternativa per soddisfare lo scopo principale di rafforzare il livello di sicurezza.
SFTP sta per SSH File Transfer Protocol o Secure File Transfer Protocol. Utilizza un protocollo separato incluso in SSH per fornire una connessione sicura.
1. Nota preliminare
Per questo tutorial, sto usando CentOS 7 nella versione a 64 bit. Gli stessi passaggi funzioneranno anche su CentOS 6. Il risultato del tutorial mostrerà come a un client può essere fornito l'accesso al server SFTP ma non è in grado di accedere al server stesso tramite SSH.
2. Installazione SFTP
A differenza del normale FTP, non è necessario installare pacchetti aggiuntivi per utilizzare SFTP. Abbiamo solo bisogno del pacchetto SSHd precompilato che è già stato installato durante l'installazione sul server. Pertanto, controlla solo per confermare se hai già il pacchetto SSH richiesto. Di seguito sono riportati i passaggi:
Corri:
rpm -qa|grep ssh
L'output dovrebbe essere simile a questo:
[[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
Questo è tutto, ora andremo su come effettuare la configurazione SFTP.
3. Configurazione SFTP
Una volta completati tutti i prerequisiti per l'installazione, si passerà alla fase di configurazione. Per la migliore pratica, dobbiamo creare un gruppo e un utente in modo da poter gestire tutti gli utenti che riceveranno l'accesso SFTP. Ma prima, creiamo una cartella aggiuntiva chiamata data. Di seguito sono riportati i passaggi:
mkdir -p /data/sftp
chmod 701 /data
Fondamentalmente quello che sto cercando di fare con il passaggio precedente è ottenere una cartella separata come directory principale per l'accesso SFTP. Tutte le directory utente per gli utenti SFTP saranno sottodirectory di questa cartella di dati.
Creiamo un gruppo per l'utente SFTP, di seguito sono riportati i passaggi:
groupadd sftpusers
Quindi crea un utente 'howtoforge' e assegnalo al gruppo SFTPUSERS. Di seguito sono riportati i passaggi:
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.
Di seguito è riportata la spiegazione dei comandi precedenti:
- Creo un utente e lo includo nel gruppo sftpusers usando il comando -g.
- Assegno la directory principale affinché l'utente si trovi nella directory /upload impostando il comando -d /upload. Ciò significa che in seguito la cartella /upload sarà in /data/mysftpuser/upload.
- Limizzo l'accesso alla shell /sbin/nologin per garantire che l'utente sia in grado di utilizzare solo il protocollo SFTP, non SSH.
- Nomino l'utente "mysftpuser".
- Imposta la password per l'utente "mysftpuser".
Ora creiamo la cartella /upload in /data/mysftpuser, quindi assegniamo la proprietà appropriata alla cartella.
mkdir -p /data/mysftpuser/upload
chown -R root:sftpusers /data/mysftpuser
chown -R mysftpuser:sftpusers /data/mysftpuser/upload
Una volta fatto, verifica che la nuova cartella nella directory /data esista e che la configurazione sia corretta.
[[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
Ora configura il protocollo SSH per creare un processo SFTP. Questo può essere fatto modificando il file di configurazione in /etc/ssh/sshd_config. Di seguito sono riportati i passaggi:
nano /etc/ssh/sshd_config
Aggiungi le seguenti righe alla fine del file.
Match Group sftpusers
ChrootDirectory /data/%u
ForceCommand internal-sftp
Una volta terminato, riavvia i servizi SSH, di seguito sono riportati i passaggi:
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. Test dell'SFTP
Ora tutto è stato configurato, quindi facciamo un test per assicurarci che la configurazione soddisfi il nostro scopo.
Accederò a SFTP utilizzando un altro server chiamato TEST01. Per prima cosa, verificherò la porta del server SFTP. Per farlo userò la funzione nmap. Se il tuo server client non lo aveva, puoi scaricarlo e installarlo con yum come mostrato di seguito:
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
Noterai che attualmente sul nostro server SFTP, l'unica porta aperta è SSH 22. Ora, proviamo ad accedere al server SFTP (IP:192.168.1.100 nel mio caso) dal client TEST01. Di seguito sono riportati i passaggi:
[[email protected] /]# sftp [email protected]
[email protected]'s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp>
Grande! Ora il nostro server SFTP è accessibile dall'esterno. Si noti che la directory predefinita è /upload. Ciò significa che SFTP mostrerà solo il percorso predefinito come /upload anche se la nostra precedente configurazione effettuata nella directory del server SFTP è /data/mysftpuser/upload.
Ora proviamo a ottenere un file dalla directory del server SFTP nel nostro cliente di prova. Per prima cosa, creiamo un file di prova in /data/mysftpuser/upload. Di seguito sono riportati i passaggi:
cd /data/mysftpuser/upload
touch testing_file.txt
Quindi torna al nostro sito di test TEST01 e verifica se siamo in grado di ottenere e scaricare il file creato.
[[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
Eccellente! Il nostro test SFTP ha avuto successo, proviamo ad accedere a SSH usando l'utente mysftpuser. Come in precedenza, abbiamo impostato la configurazione come /sbin/nologin, quindi l'utente non sarà in grado di utilizzare i servizi SSH:
[[email protected] ~]# ssh [email protected]
[email protected]'s password:
This service allows sftp connections only.
Connection to 192.168.1.100 closed.
Simpatico! Ora abbiamo un server SFTP sicuro attivo e funzionante.