Проведём установку и настройку сервиса vsftpd на CentOS 7. Чтобы установить его, нужно выполнить следующую команду:
yum install vsftpd
Запустим и разрешим сервису запускаться во время загрузки:
systemctl start vsftpd systemctl enable vsftpd
Вы можете проверить, что служба vsftpd запущена, выполнив команду:
systemctl status vsftpd
Вывод будем примерно таким:
● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2021-01-29 12:51:24 UTC; 10s ago Main PID: 28841 (vsftpd) CGroup: /system.slice/vsftpd.service └─28841 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Настройка vsftpd
Настройка службы vsftpd выполняется через файл /etc/vsftpd/vsftpd.conf.
Откройте файл конфигурации vsftpd для настройки:
nano /etc/vsftpd/vsftpd.conf
Включение доступа по FTP
Сделаем так, что разрешить подключатся к серверу только локальным пользователям. Для этого надо в пунктах anonymous_enable и local_enable изменить значение:
anonymous_enable=NO local_enable=YES
Настройка загрузки файлов
Раскомментируйте write_enable параметр, чтобы разрешить загрузку и удаление файлов.
write_enable=YES
Так же укажем параметр local_umask — чтобы на загруженный файлы устанавливались права 655, а на директории 755:
local_umask=055
Настройка домашнего FTP каталога для пользователя
Чтобы пользователи не смогли получить доступ в другие каталоги кроме своей, измените параметр chroot_local_user:
chroot_local_user=YES
По умолчанию, когда включен chroot, vsftpd откажется загружать файлы, если каталог, в котором заблокированы пользователи, доступен для записи. Это сделано для предотвращения уязвимости системы безопасности.
Так же, укажем значение следующей директиве, чтобы предоставить пользователю доступ с правом записи к его домашнему каталогу
allow_writeable_chroot=YES
Директория пользователя для FTP устанавливается в конфигурационный файл с параметром local_root, Вы можете изменить директорию на своё усмотрение, например:
local_root=/home/$USER/SUPER_FTP
Мы так же можем создать файл .message в каталоге пользователя и написать туда какое-либо приветствие, которое будет показываться при входе в каталог. Чтобы включить данную функцию — добавьте в конфигурационный файл строку:
dirmessage_enable=YES
Настройка FTP-соединение
Укажем минимальный и максимальный диапазон портов для соединения:
pasv_min_port=30000 pasv_max_port=31000
Настройка ограничения входа пользователя
Чтобы разрешить вход на сервер только конкретным пользователям — добавьте следующие строки после строки:
userlist_file=/etc/vsftpd/user_list userlist_deny=NO
Когда этот параметр включен, вам необходимо указать какие пользователи могут входить в систему, добавив имена пользователей в файл /etc/vsftpd/user_list, при этом каждый пользователь должен быть прописан с новой строки.
Настройка защищенного соединения SSL/TLS
Чтобы включить защищённые FTP-передачи с помощью SSL/TLS — потребуется сертификат SSL.Вы можете использовать существующий сертификат SSL, подписанный доверенным центром сертификации, или создать самоподписный сертификат. Если у вас есть домен или поддомен, указывающий на IP-адрес FTP-сервера, вы можете легко создать бесплатный SSL-сертификат Let’s Encrypt. В другом случае, мы можем создать 2048-битный закрытый ключ и самозаверяющий сертификат, действительный в течение 10 лет. выполните эту команду и сертификат с ключём будет созранён в одном файле:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
После создания SSL-сертификата откройте файл конфигурации vsftpd. Найдите строки и пропишите путь к созданному файлу с сертификатом и ключём:
rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES
После изменений перезапустите службу vsftpd:
systemctl start vsftpd
Окончательный конфигурационный файл должен выглядеть так:
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 connect_from_port_20=YES chroot_local_user=YES listen=NO pam_service_name=vsftpd userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=NO tcp_wrappers=YES user_sub_token=$USER local_root=/home/$USER/ftp pasv_min_port=30000 pasv_max_port=31000 rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES
Если Вам принципиально отслеживание всех действий FTP пользователей, тогда пропишите в конфигурационный файл:
xferlog_std_format=YES xferlog_enable=YES
Тем самым мы включили логи всех действий, которые будут происходить на FTP-сервере.
Настройка iptables
Если вы используете брандмауэр, вам необходимо разрешить FTP-трафик.Чтобы открыть порты 21, 20 и диапазон портов 30000-31000, выполните следующие команды:
iptables -A INPUT -p tcp --match multiport --dports 20:21-j ACCEPT iptables -A INPUT -p tcp --match multiport --dports 30000:31000-j ACCEPT
Создание пользователя FTP
Чтобы создать нового пользователя myftpuser, выполним команду:
adduser myftpuser
Далее необходимо установить пароль пользователя :
passwd myftpuser
Добавьте пользователя в список разрешенных пользователей FTP:
echo "myftpuser" | sudo tee -a /etc/vsftpd/user_list
После чего нужно создать каталоги и устаноить необходимые права:
mkdir -p /home/myftpuser/ftp/upload chmod 550 /home/myftpuser/ftp chmod 750 /home/myftpuser/ftp/upload chown -R myftpuser: /home/myftpuser/ftp
После чего, пользователь сможет загружать свои файлы в директорию ftp/upload.
На этом настройка vsftpd закончена. Вы можете подключаться к своему серверу с помощью любого FTP-клиента, например FileZilla .