Поиск по сайту:

Как установить, настроить и защитить FTP-сервер в CentOS 7 — [Подробное руководство]


FTP (Протокол передачи файлов) – это традиционный и широко используемый стандартный инструмент для передачи файлов между сервером и клиентами по сети, особенно там, где аутентификация не требуется (разрешает анонимным пользователям для подключения к серверу). Мы должны понимать, что FTP по умолчанию небезопасен, поскольку он передает учетные данные и данные пользователя без шифрования.

В этом руководстве мы опишем шаги по установке, настройке и защите FTP-сервера (VSFTPD означает «Very Secure FTP Daemon») в 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 установлено значение YES, если 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 по соображениям безопасности, однако мы можем использовать опцию 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.