Wéi installéiere, konfiguréieren a sécheren FTP Server am CentOS 7 - [Comprehensive Guide]


FTP (File Transfer Protocol) ass en traditionellt a wäit benotzt Standard-Tool fir Dateien tëscht engem Server a Clienten iwwer en Netz ze transferéieren, besonnesch wou keng Authentifikatioun néideg ass (erlaabt anonyme Benotzer mat engem Server ze verbannen). Mir musse verstoen datt FTP als Standard onsécher ass, well et Benotzer Umeldungsinformatiounen an Daten ouni Verschlësselung iwwerdréit.

An dësem Guide beschreiwen mir d'Schrëtt fir e FTP-Server z'installéieren, ze konfiguréieren an ze sécheren (VSFFTPD steet fir Very Secure FTP Daemon) an CentOS/RHEL 7 a Fedora Verdeelungen.

Bedenkt datt all Kommandoen an dësem Guide als Root lafen, am Fall wou Dir de Server net mam Root Kont operéiert, benotzt de sudo Kommando fir Root Privilegien ze kréien.

Schrëtt 1: FTP Server installéieren

1. Installéiere vum vsftpd-Server ass direkt vir, fuert just de folgende Kommando am Terminal.

# yum install vsftpd

2. Nodeems d'Installatioun ofgeschloss ass, gëtt de Service fir d'éischt deaktivéiert, also musse mir et fir de Moment manuell starten an et aktivéieren fir automatesch vum nächste Systemboot ze starten:

# systemctl start vsftpd
# systemctl enable vsftpd

3. Als nächst, fir Zougang zu FTP-Servicer vun externen Systemer z'erméiglechen, musse mir den Hafen 21 opmaachen, wou d'FTP-Dämone wéi follegt lauschteren:

# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

Schrëtt 2: FTP Server konfiguréieren

4. Elo wäerte mir iwwergoen fir e puer Konfiguratiounen auszeféieren fir eisen FTP-Server opzestellen an ze sécheren, loosst eis ufänken mat engem Backup vun der ursprénglecher Konfiguratiounsdatei /etc/vsftpd/vsftpd.conf:

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Als nächst, öffnen d'Configuratiounsdatei hei uewen a setzen déi folgend Optiounen mat dësen entspriechende Wäerter:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Elo konfiguréieren FTP fir FTP Zougang zu Benotzer ze erlaben/ze verleegnen baséiert op der Benotzerlëscht Datei /etc/vsftpd.userlist.

Par défaut sinn Benotzer, déi an userlist_file=/etc/vsftpd.userlist opgezielt sinn, de Login Zougang verweigert mat der Userlist_deny Optioun op JO gesat, wann userlist_enable=JO.

Wéi och ëmmer, userlist_deny=NEE ännert d'Astellung, dat heescht datt nëmmen Benotzer explizit an userlist_file=/etc/vsftpd.userlist opgezielt sinn erlaabt ze aloggen.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Dat ass net alles, wann d'Benotzer sech op de FTP-Server aloggen, gi se an engem Chroot'ed Prisong gesat, dëst ass de lokale Root-Verzeichnis deen nëmmen als Heemverzeechnes fir d'FTP-Sessioun handelt.

Als nächst wäerte mir zwee méiglech Szenarie kucken wéi Dir FTP Benotzer an Home Verzeichnungen (lokal Root) Verzeechnes fir FTP Benotzer chroot, wéi hei ënnen erkläert.

6. Füügt elo dës zwou folgend Optiounen derbäi fir FTP Benotzer op hir Home Verzeichnungen ze beschränken.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=JO heescht datt lokal Benotzer an engem Chroot Prisong gesat ginn, hiren Heemverzeichnis no der Login duerch Standardastellungen.

An och als Standard erlaabt vsftpd net datt de Chroot Prisongsverzeechnes aus Sécherheetsgrënn schreiwen kann, awer mir kënnen d'Optioun benotzen allow_writeable_chroot=JO fir dës Astellung ze iwwerschreiden.

Späichert d'Datei a maach se zou.

FTP Server mat SELinux ofsécheren

7. Elo, loosst eis d'SELinux boolesch ënnen setzen fir FTP z'erméiglechen Dateien an engem Heemverzeechnes vun engem Benotzer ze liesen. Notéiert datt dëst am Ufank gemaach gouf mam Kommando:

# setsebool -P ftp_home_dir on

Wéi och ëmmer, d'ftp_home_dir Direktiv gouf als Standard deaktivéiert wéi an dësem Fehlerbericht erkläert: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Elo benotze mir Semanage Kommando fir d'SELinux Regel ze setzen fir FTP z'erlaaben fir den Heemverzeechnes vum Benotzer ze liesen/ze schreiwen.

# semanage boolean -m ftpd_full_access --on

Zu dësem Zäitpunkt musse mir vsftpd nei starten fir all d'Ännerungen auszeféieren, déi mir bis elo uewe gemaach hunn:

# systemctl restart vsftpd

Schrëtt 4: FTP Server testen

8. Elo wäerte mir den FTP-Server testen andeems Dir e FTP-Benotzer mat useradd Kommando erstellt.

# useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
# passwd ravi

Duerno musse mir de Benotzer ravi an d'Datei /etc/vsftpd.userlist addéieren mam Echo Kommando wéi follegt:

# echo "ravi" | tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist

9. Elo ass et Zäit fir ze testen ob eis Astellungen hei uewen richteg funktionnéieren. Loosst eis ufänken mat anonyme Login ze testen, mir kënne vum Écran hei ënnen gesinn datt anonym Login net erlaabt sinn:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Loosst eis och testen ob e Benotzer deen net an der Datei /etc/vsftpd.userlist opgezielt ass, d'Erlaabnis kritt fir sech unzemellen, wat net de Fall ass wéi am Bildschierm hei ënnen:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Maacht elo eng lescht Kontroll, ob e Benotzer, deen an der Datei /etc/vsftpd.userlist opgezielt ass, tatsächlech a säin Heemverzeichnis nom Login plazéiert ass:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Aktivéiert dës Optioun nëmmen wann Dir genau wësst wat Dir maacht. Et ass wichteg ze bemierken datt dës Sécherheetsimplikatiounen net vsftpd spezifesch sinn, si gëllen fir all FTP Daemonen déi ubidden fir lokal Benotzer och an Chroot Prisongen ze setzen.

Dofir wäerte mir e méi séchere Wee kucken fir en aneren net-schreiwenbare lokale Root-Verzeichnis an der nächster Sektioun ze setzen.

Schrëtt 5: Configuréieren Verschidde FTP Benotzer Home Directories

12. Öffnen d'vsftpd Konfiguratiounsdatei erëm a fänkt un mat der onsécherer Optioun hei drënner ze kommentéieren:

#allow_writeable_chroot=YES

Erstellt dann den alternativen lokalen Root-Verzeichnis fir de Benotzer (ravi, Ären ass wahrscheinlech anescht) a läscht d'Schreifrechter fir all Benotzer an dësem Verzeichnis:

# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp

13. Als nächst erstellt e Verzeechnes ënner der lokaler Root wou de Benotzer seng Dateie späichert:

# mkdir /home/ravi/ftp/files
# chown ravi:ravi  /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/

Dann addéieren/änneren déi folgend Optiounen an der vsftpd Configuratiounsdatei mat dëse Wäerter:

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

Späichert d'Datei a maach se zou. Nach eng Kéier, loosst eis de Service mat den neien Astellungen nei starten:

# systemctl restart vsftpd

14. Maacht elo nach eng Kéier e leschten Test a kuckt datt d'Benotzer lokalen Root-Verzeichnis de FTP-Verzeichnis ass, dee mir a sengem Heemverzeichnis erstallt hunn.

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Dat ass et! An dësem Artikel hu mir beschriwwen wéi een e FTP-Server am CentOS 7 installéiere kann, konfiguréieren an och sécheren, benotzt d'Kommentarsektioun hei drënner fir eis zréck ze schreiwen iwwer dëse Guide/all nëtzlech Informatioun iwwer dëst Thema ze deelen.

Am nächsten Artikel wäerte mir Iech och weisen wéi Dir en FTP-Server mat SSL/TLS-Verbindungen am CentOS 7 ofséchert, bis dohin, bleift verbonne mat TecMint.