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:
- Ich erstelle einen Benutzer und nehme ihn mit dem Befehl -g in die sftpusers-Gruppe auf.
- 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.
- Ich beschränke den Zugriff auf die /sbin/nologin-Shell, um sicherzustellen, dass der Benutzer nur das SFTP-Protokoll und nicht SSH verwenden kann.
- Ich nenne den Benutzer „mysftpuser“.
- 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.