Как да инсталирате, конфигурирате и защитите FTP сървър в CentOS 7 - [Изчерпателно ръководство]


FTP (Протокол за прехвърляне на файлове) е традиционен и широко използван стандартен инструмент за прехвърляне на файлове между сървър и клиенти през мрежа, особено когато не е необходимо удостоверяване (разрешава анонимни потребители за свързване към сървър). Трябва да разберем, че FTP не е защитен по подразбиране, защото предава потребителски идентификационни данни и данни без криптиране.

В това ръководство ще опишем стъпките за инсталиране, конфигуриране и защита на FTP сървър (VSFTPD означава „Много защитен FTP демон“) в CentOS дистрибуции на /RHEL 7 и Fedora.

Имайте предвид, че всички команди в това ръководство ще се изпълняват като root, в случай че не работите със сървъра с root акаунт, използвайте командата sudo, за да получите права на root.

Стъпка 1: Инсталиране на FTP сървър

1. Инсталирането на vsftpd сървър е лесно, просто изпълнете следната команда в терминала.

yum install vsftpd

2. След като инсталацията приключи, услугата първо ще бъде деактивирана, така че трябва да я стартираме ръчно за момента и да я активираме да стартира автоматично и от следващото зареждане на системата:

systemctl start vsftpd
systemctl enable vsftpd

3. След това, за да позволим достъп до FTP услуги от външни системи, трябва да отворим порт 21, където FTP демоните слушат както следва:

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

Стъпка 2: Конфигуриране на FTP сървър

4. Сега ще преминем към извършване на няколко конфигурации за настройка и защита на нашия FTP сървър, нека започнем, като направим резервно копие на оригиналния конфигурационен файл /etc/vsftpd/vsftpd.conf :

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

След това отворете конфигурационния файл по-горе и задайте следните опции със съответните стойности:

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. Сега конфигурирайте FTP, за да разрешавате/отказвате FTP достъп на потребители въз основа на файла със списъка на потребителите /etc/vsftpd.userlist.

По подразбиране на потребителите, посочени в userlist_file=/etc/vsftpd.userlist, е отказан достъп за влизане с опция userlist_deny, зададена на ДА, ако userlist_enable=ДА.

Въпреки това, userlist_deny=NO променя настройката, което означава, че само потребители, изрично посочени в userlist_file=/etc/vsftpd.userlist, ще имат право да влизат.

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   

Това не е всичко, когато потребителите влизат във FTP сървъра, те се поставят в затвор с chroot, това е локалната основна директория, която ще действа като тяхна домашна директория само за FTP сесията.

След това ще разгледаме два възможни сценария за това как да chroot FTP потребители към начална директория (локален корен) директория за FTP потребители, както е обяснено по-долу.

6. Сега добавете следните две опции, за да ограничите FTP потребителите до техните начални директории.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES означава, че локалните потребители ще бъдат поставени в chroot затвор, тяхната домашна директория след влизане по подразбиране.

Освен това по подразбиране vsftpd не позволява запис в директорията на chroot jail от съображения за сигурност, но можем да използваме опцията allow_writeable_chroot=YES, за да отменим тази настройка.

Запазете файла и го затворете.

Защита на FTP сървър със SELinux

7. Сега, нека зададем булево значение SELinux по-долу, за да позволи на FTP да чете файлове в домашната директория на потребителя. Обърнете внимание, че първоначално това беше направено с помощта на командата:

setsebool -P ftp_home_dir on

Въпреки това, директивата ftp_home_dir е деактивирана по подразбиране, както е обяснено в този доклад за грешка: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Сега ще използваме командата semanage, за да настроим правилото на SELinux, което да позволи на FTP да чете/записва домашната директория на потребителя.

semanage boolean -m ftpd_full_access --on

В този момент трябва да рестартираме vsftpd, за да изпълним всички промени, които направихме досега по-горе:

systemctl restart vsftpd

Стъпка 4: Тестване на FTP сървър

8. Сега ще тестваме FTP сървър, като създадем FTP потребител с команда useradd.

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

След това трябва да добавим потребителя ravi към файла /etc/vsftpd.userlist с помощта на командата echo, както следва:

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

9. Сега е време да тестваме дали нашите настройки по-горе работят правилно. Нека започнем с тестване на анонимни влизания, можем да видим от екранната снимка по-долу, че анонимните влизания не са разрешени:

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. Нека също да тестваме дали потребител, който не е посочен във файла /etc/vsftpd.userlist, ще получи разрешение за влизане, което не е така, както е на екранната снимка По-долу:

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. Сега направете последна проверка дали потребител, посочен във файла /etc/vsftpd.userlist, действително е поставен в неговата/нейната домашна директория след влизане:

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

Активирайте тази опция само ако знаете точно какво правите. Важно е да се отбележи, че тези последици за сигурността не са специфични за vsftpd, те се прилагат за всички FTP демони, които също предлагат да поставят локални потребители в chroot затвори.

Затова в следващия раздел ще разгледаме по-сигурен начин за задаване на различна локална основна директория без възможност за запис.

Стъпка 5: Конфигурирайте различни домашни директории на FTP потребители

12. Отворете отново конфигурационния файл vsftpd и започнете, като коментирате несигурната опция по-долу:

#allow_writeable_chroot=YES

След това създайте алтернативната локална основна директория за потребителя (ravi, вашата вероятно е различна) и премахнете разрешенията за запис за всички потребители в тази директория:

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

13. След това създайте директория под локалния корен, където потребителят ще съхранява своите файлове:

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

След това добавете/променете следните опции в конфигурационния файл vsftpd с тези стойности:

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

Запазете файла и го затворете. Още веднъж, нека рестартираме услугата с новите настройки:

systemctl restart vsftpd

14. Сега направете последен тест отново и вижте, че локалната главна директория на потребителя е FTP директорията, която създадохме в неговата домашна директория.

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

Това е! В тази статия описахме как да инсталирате, конфигурирате и защитите FTP сървър в CentOS 7, използвайте раздела за коментари по-долу, за да ни пишете относно това ръководство/споделете всяка полезна информация по тази тема.

Предложено за четене: Инсталирайте ProFTPD сървър на RHEL/CentOS 7

В следващата статия ще ви покажем също как да защитите FTP сървър с помощта на SSL/TLS връзки в CentOS 7, дотогава оставайте свързани с TecMint.