Wyszukiwanie w witrynie

Jak zainstalować, skonfigurować i zabezpieczyć serwer FTP w CentOS 7 - [Kompleksowy przewodnik]


FTP (Protokół przesyłania plików) to tradycyjne i szeroko stosowane standardowe narzędzie do przesyłania plików pomiędzy serwerem a klientami za pośrednictwem sieci, szczególnie tam, gdzie nie jest konieczne uwierzytelnianie (pozwala anonimowym użytkownikom aby połączyć się z serwerem). Musimy zrozumieć, że FTP jest domyślnie niezabezpieczony, ponieważ przesyła dane uwierzytelniające użytkownika i dane bez szyfrowania.

W tym przewodniku opiszemy kroki instalacji, konfiguracji i zabezpieczenia serwera FTP (VSFTPD oznacza „Very Secure FTP Daemon”) w CentOS/RHEL 7 i Fedora dystrybucje.

Pamiętaj, że wszystkie polecenia w tym przewodniku zostaną uruchomione jako root. Jeśli nie korzystasz z serwera z kontem root, użyj polecenia sudo, aby uzyskać uprawnienia roota.

Krok 1: Instalacja serwera FTP

1. Instalacja serwera vsftpd jest prosta, wystarczy uruchomić następujące polecenie w terminalu.

yum install vsftpd

2. Po zakończeniu instalacji usługa zostanie początkowo wyłączona, więc musimy na razie uruchomić ją ręcznie i włączyć ją również automatycznie przy następnym uruchomieniu systemu:

systemctl start vsftpd
systemctl enable vsftpd

3. Następnie, aby umożliwić dostęp do usług FTP z systemów zewnętrznych, musimy otworzyć port 21, na którym nasłuchują demony FTP w następujący sposób:

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

Krok 2: Konfiguracja serwera FTP

4. Teraz przejdziemy do wykonania kilku konfiguracji w celu skonfigurowania i zabezpieczenia naszego serwera FTP. Zacznijmy od wykonania kopii zapasowej oryginalnego pliku konfiguracyjnego /etc/vsftpd/vsftpd.conf :

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

Następnie otwórz powyższy plik konfiguracyjny i ustaw następujące opcje z odpowiednimi wartościami:

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. Teraz skonfiguruj FTP, aby zezwalał/odmawiał dostępu FTP użytkownikom na podstawie pliku listy użytkowników /etc/vsftpd.userlist.

Domyślnie użytkownikom wymienionym w userlist_file=/etc/vsftpd.userlist odmawia się dostępu do logowania, gdy opcja userlist_deny jest ustawiona na YES, jeśli userlist_enable=TAK.

Jednakże userlist_deny=NO zmienia to ustawienie, co oznacza, że tylko użytkownicy wyraźnie wymienieni w userlist_file=/etc/vsftpd.userlist będą mogli się zalogować.

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   

To nie wszystko, gdy użytkownicy logują się do serwera FTP, są umieszczani w więzieniu z chrootem, jest to lokalny katalog główny, który będzie ich katalogiem domowym tylko dla sesji FTP.

Następnie przyjrzymy się dwóm możliwym scenariuszom chrootowania użytkowników FTP do katalogów domowych (lokalnego katalogu głównego) dla użytkowników FTP, jak wyjaśniono poniżej.

6. Teraz dodaj te dwie poniższe opcje, aby ograniczyć użytkowników FTP do ich katalogów domowych.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES oznacza, że lokalni użytkownicy zostaną umieszczeni w więzieniu chroot, ich katalogu domowym po zalogowaniu się zgodnie z domyślnymi ustawieniami.

Domyślnie vsftpd nie pozwala na zapis w katalogu więzienia chroot ze względów bezpieczeństwa, jednak możemy użyć opcji allow_writeable_chroot=YES, aby zastąpić to ustawienie.

Zapisz plik i zamknij go.

Zabezpieczanie serwera FTP za pomocą SELinux

7. Teraz ustawmy wartość logiczną SELinux poniżej, aby umożliwić FTP odczytywanie plików z katalogu domowego użytkownika. Zauważ, że początkowo robiono to za pomocą polecenia:

setsebool -P ftp_home_dir on

Jednakże dyrektywa ftp_home_dir została domyślnie wyłączona, jak wyjaśniono w tym raporcie o błędzie: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Teraz użyjemy polecenia semanage, aby ustawić regułę SELinux zezwalającą FTP na odczyt/zapis katalogu domowego użytkownika.

semanage boolean -m ftpd_full_access --on

W tym momencie musimy zrestartować vsftpd, aby zastosować wszystkie zmiany, które wprowadziliśmy do tej pory powyżej:

systemctl restart vsftpd

Krok 4: Testowanie serwera FTP

8. Teraz przetestujemy serwer FTP, tworząc użytkownika FTP za pomocą polecenia useradd.

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

Następnie musimy dodać użytkownika ravi do pliku /etc/vsftpd.userlist za pomocą polecenia echo w następujący sposób:

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

9. Teraz czas sprawdzić, czy nasze powyższe ustawienia działają poprawnie. Zacznijmy od przetestowania logowania anonimowego. Na zrzucie ekranu poniżej widzimy, że logowanie anonimowe jest niedozwolone:

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. Sprawdźmy też, czy użytkownik nie wymieniony w pliku /etc/vsftpd.userlist otrzyma pozwolenie na logowanie, co nie ma miejsca jak na zrzucie ekranu poniżej:

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. Teraz sprawdź ostatecznie, czy użytkownik wymieniony w pliku /etc/vsftpd.userlist, po zalogowaniu, rzeczywiście znajduje się w swoim katalogu domowym:

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

Aktywuj tę opcję tylko wtedy, gdy dokładnie wiesz, co robisz. Należy zauważyć, że te implikacje bezpieczeństwa nie są specyficzne dla vsftpd, dotyczą one wszystkich demonów FTP, które oferują również umieszczanie lokalnych użytkowników w więzieniach chroot.

Dlatego w następnej sekcji przyjrzymy się bezpieczniejszemu sposobowi ustawienia innego, niezapisywalnego lokalnego katalogu głównego.

Krok 5: Skonfiguruj różne katalogi domowe użytkowników FTP

12. Otwórz ponownie plik konfiguracyjny vsftpd i zacznij od skomentowania niezabezpieczonej opcji poniżej:

#allow_writeable_chroot=YES

Następnie utwórz alternatywny lokalny katalog główny dla użytkownika (ravi, Twój prawdopodobnie jest inny) i usuń uprawnienia do zapisu wszystkim użytkownikom w tym katalogu:

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

13. Następnie utwórz katalog w lokalnym katalogu głównym, w którym użytkownik będzie przechowywać swoje pliki:

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

Następnie dodaj/zmodyfikuj następujące opcje w pliku konfiguracyjnym vsftpd, używając tych wartości:

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

Zapisz plik i zamknij go. Jeszcze raz zrestartujmy usługę z nowymi ustawieniami:

systemctl restart vsftpd

14. Teraz wykonaj jeszcze raz końcowy test i sprawdź, czy lokalnym katalogiem głównym użytkownika jest katalog FTP, który utworzyliśmy w jego katalogu domowym.

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

Otóż to! W tym artykule opisaliśmy, jak zainstalować, skonfigurować i zabezpieczyć serwer FTP w CentOS 7. Skorzystaj z sekcji komentarzy poniżej, aby napisać do nas w sprawie tego przewodnika/podzielić się przydatnymi informacjami na ten temat.

Sugerowana lektura: Zainstaluj serwer ProFTPD na RHEL/CentOS 7

W następnym artykule pokażemy również, jak zabezpieczyć serwer FTP za pomocą połączeń SSL/TLS w CentOS 7, do tego czasu pozostań w kontakcie z TecMint.