So richten Sie einen SFTP-Server auf CentOS ein

Dieses Tutorial erklärt, wie man einen SFTP-Server unter CentOS einrichtet und verwendet. Bevor ich beginne, möchte ich erklären, was SFTP eigentlich darstellt und wofür es verwendet wird. Derzeit wissen die meisten Menschen, dass wir normales FTP verwenden können, um Daten von einem Server zum Client oder Client zum Server zu übertragen, herunterzuladen oder hochzuladen. Aber dieses Protokoll wird von anonymen Eindringlingen leicht gehackt (wenn TLS nicht verwendet wird), da die Ports für jedermann weit offen sind. Daher wurde SFTP als weitere Alternative eingeführt, um den Hauptzweck der Stärkung des Sicherheitsniveaus zu erfüllen.

SFTP steht für SSH File Transfer Protocol oder Secure File Transfer Protocol. Es verwendet ein separates Protokoll, das mit SSH verpackt ist, um eine sichere Verbindung zu gewährleisten.

1. Vorbemerkung

Für dieses Tutorial verwende ich CentOS 7 in der 64bit-Version. Die gleichen Schritte werden auch auf CentOS 6 funktionieren. Das Ergebnis des Tutorials zeigt, wie ein Client mit Zugriff auf den SFTP-Server ausgestattet werden kann, sich aber nicht über SSH am Server selbst anmelden kann.

2. SFTP-Installation

Im Gegensatz zu normalem FTP müssen keine zusätzlichen Pakete installiert werden, um SFTP zu verwenden. Wir benötigen nur das vorkonfigurierte SSHd-Paket, das bereits bei der Installation auf dem Server installiert wurde. Überprüfen Sie daher einfach, ob Sie bereits das gewünschte SSH-Paket haben. Nachfolgend finden Sie die Schritte:

Lauf:

rpm -qa|grep ssh

Die Ausgabe sollte ähnlich sein:

[root@localhost ~]# 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

Das ist alles, jetzt werden wir weitermachen, wie man die SFTP-Konfiguration erstellt.

3. SFTP-Konfiguration

Sobald alle Voraussetzungen für die Installation erfüllt sind, gehen wir zur Konfigurationsphase über. Für Best Practices müssen wir eine Gruppe und einen Benutzer anlegen, damit wir alle Benutzer verwalten können, die SFTP-Zugang erhalten sollen. Aber zuerst erstellen wir einen zusätzlichen Ordner namens data. Nachfolgend finden Sie die Schritte:

mkdir -p /data/sftp
chmod 701 /data

Im Grunde genommen versuche ich, mit dem obigen Schritt einen separaten Ordner als Hauptverzeichnis für den SFTP-Zugang zu erhalten. Alle Benutzerverzeichnisse für die SFTP-Benutzer werden Unterverzeichnisse dieses Datenordners sein.

Erstellen wir eine Gruppe für den SFTP-Benutzer, unten sind die Schritte:

groupadd sftpusers

Erstellen Sie dann einen Benutzer „howtoforge“ und weisen Sie ihn der Gruppe SFTPUSERS zu. Nachfolgend finden Sie die Schritte:

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.

Nachfolgend finden Sie die Erklärung der oben genannten Befehle:

  1. Ich erstelle einen Benutzer und nehme ihn mit dem Befehl -g in die sftpusers-Gruppe auf.
  2. Ich weise dem Benutzer das Hauptverzeichnis zu, in dem er sich im Verzeichnis /upload befinden soll, indem ich den Befehl -d /upload setze. Das bedeutet, dass sich der Ordner /upload später unter /data/mysftpuser/upload befindet.
  3. Ich beschränke den Zugriff auf die /sbin/nologin-Shell, um sicherzustellen, dass der Benutzer nur das SFTP-Protokoll und nicht SSH verwenden kann.
  4. Ich nenne den Benutzer „mysftpuser“.
  5. Setzen Sie das Passwort für den Benutzer „mysftpuser“.

Erstellen wir nun den Ordner /upload unter /data/mysftpuser und weisen wir dem Ordner dann das entsprechende Eigentum zu.

mkdir -p /data/mysftpuser/upload
chown -R root:sftpusers /data/mysftpuser
chown -R mysftpuser:sftpusers /data/mysftpuser/upload

Vergewissern Sie sich, dass der neue Ordner im Verzeichnis /data existiert und dass wir die Konfiguration korrekt vorgenommen haben.

[root@localhost ~]# ls -ld /data/
drwx-----x. 5 root root 54 Mar 22 14:29 /data/
[root@localhost ~]# ls -ld /data/mysftpuser
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/mysftpuser
[root@localhost ~]# ls -ld /data/mysftpuser/upload
drwxr-xr-x. 2 mysftpuser sftpusers 6 Mar 22 14:29 /data/mysftpuser/upload
[root@localhost ~]# cat /etc/passwd|grep mysftpuser
mysftpuser:x:1001:1001::/upload:/sbin/nologin

Konfigurieren Sie nun das SSH-Protokoll, um einen SFTP-Prozess zu erstellen. Dies kann durch Bearbeiten der Konfigurationsdatei unter /etc/ssh/ssh/sshd_config erfolgen. Nachfolgend finden Sie die Schritte:

nano /etc/ssh/sshd_config

Füge die folgenden Zeilen am Ende der Datei hinzu.

Match Group sftpusers
ChrootDirectory /data/%u
ForceCommand internal-sftp

Nach dem Neustart der SSH-Dienste folgen die folgenden Schritte:

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
[root@localhost ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service

4. SFTP-Test

Jetzt ist alles konfiguriert, also lassen Sie uns einen Test durchführen, um sicherzustellen, dass das Setup unserem Zweck entspricht.
Ich werde auf SFTP zugreifen, indem ich einen anderen Server namens TEST01 verwende. Zuerst werde ich den Port des SFTP-Servers überprüfen. Dazu verwende ich die nmap-Funktion. Wenn dein Client-Server es nicht hatte, kannst du es herunterladen und mit yum installieren, wie unten gezeigt:

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!
[root@localhost ~]# 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

Sie werden feststellen, dass der einzige offene Port auf unserem SFTP-Server derzeit SSH 22 ist. Versuchen wir nun, vom TEST01-Client aus auf den SFTP-Server (IP: 192.168.1.100 in meinem Fall) zuzugreifen. Nachfolgend finden Sie die Schritte:

[root@TEST01 /]# sftp mysftpuser@192.168.1.100
mysftpuser@192.168.1.100's password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp>

Großartig! Jetzt ist unser SFTP-Server von außen zugänglich. Beachten Sie, dass das Standardverzeichnis /upload . ist. Das bedeutet, dass SFTP nur den Standardpfad als /upload anzeigt, obwohl unsere vorherige Konfiguration im SFTP-Serververzeichnis /data/mysftpuser/upload ist.
Versuchen wir nun, eine Datei aus dem SFTP-Serververzeichnis in unseren Testclient zu bekommen. Zuerst erstellen wir eine Testdatei unter /data/mysftpuser/upload. Nachfolgend finden Sie die Schritte:

cd /data/mysftpuser/upload
touch testing_file.txt

Dann gehen Sie zurück zu unserer Testseite TEST01 und sehen Sie, ob wir die erstellte Datei erhalten und herunterladen können.

[root@TEST01 /]# sftp mysftpuser@192.168.1.100
mysftpuser@192.168.1.100'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

Ausgezeichnet! Unser SFTP-Test war erfolgreich, lassen Sie uns versuchen, mit dem Benutzer mysftpuser auf SSH zuzugreifen. Wie zuvor haben wir die Konfiguration als /sbin/nologin festgelegt, so dass der Benutzer keine SSH-Dienste nutzen kann:

[root@TEST01 ~]# ssh mysftpuser@192.168.1.100
mysftpuser@192.168.1.100's password:
This service allows sftp connections only.
Connection to 192.168.1.100 closed.

Schön! Jetzt haben wir einen sicheren SFTP-Server in Betrieb.

Das könnte Dich auch interessieren …