Как установить, настроить и защитить 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.