FTP или File Transfer Protocol - это устаревший, но проверенный и надёжный протокол для выгрузки файлов на удалённый сервер или их скачивания.
Мы будем использовать FTP-сервер VSFTPD или Very Secure FTP Daemon, который обеспечивает самую надёжную защиту от уязвимостей.
Установить пакет vsftpd можно в магазине приложений Uncom OS или терминальной командой:
sudo apt install vsftpd
Когда установка будет завершена, вам необходимо включить сервис vsftpd, поскольку он не будет запущен по умолчанию, а также добавить службу в автозагрузку:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Если у вас установлен фаервол ufw, нужно открыть порты 20 и 21 для нормальной работы. Чтобы это сделать, выполните команды:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw status
Установка FTP-сервера Uncom OS завершена, но теперь вам осталось настроить всё необходимое для обеспечения безопасной работы. Никогда не используйте FTP-сервер с настройками по умолчанию в рабочих сетях, это небезопасно.
Теперь перейдём к настройке. Нам нужно поменять всего несколько параметров, чтобы полностью защитить ваш FTP-сервер. Сначала мы рассмотрим самые очевидные настройки: отключения анонимного входа и так далее. Сначала необходимо скопировать оригинальный файл настроек, чтобы в случае проблем вернуть всё как было:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old
Затем откройте файл в редакторе:
sudo nano /etc/vsftpd.conf
Затем добавьте следующие настройки. Рекомендуется найти и изменить значения указанных строк, добавлять новые, если они уже есть, не стоит. Сначала отключаем анонимный вход:
anonymous_enable=NO
Разрешаем использовать имена локальных пользователей для входа:
local_enable=YES
Для авторизованных пользователей разрешаем команды, позволяющие изменять файловую систему:
write_enable=YES
Установим значение umask для новых файлов, создаваемых по FTP:
local_umask=022
Включаем сообщение о необходимости выбрать каталог после регистрации:
dirmessage_enable=YES
Записывать в лог файл все транзакции по передаче файлов и использовать стандартный формат лога:
xferlog_enable=YES
xferlog_std_format=YES
Использовать порт 20 для передачи данных вместо случайного, это нужно для нормальной работы фаервола:
connect_from_port_20=YES
Указываем, что нужно ожидать входящих соединений:
listen=YES
При этом необходимо закомментировать (перед строкой дописать #) строку
listen_ipv6=YES
Использовать PAM-библиотеки:
pam_service_name=vsftpd
На завершение разрешим аутентификацию только пользователей, перечисленных в файле userlist
:
userlist_enable=YES
Указываем файл с нашими виртуальными пользователями:
userlist_file=/etc/vsftpd.userlist
По умолчанию таким пользователям запрещён вход в систему, но мы хотим совсем обратное, поэтому добавьте такую строчку:
userlist_deny=NO
При входе пользователей на FTP-сервер, они могут работать только в корневом каталоге FTP. Если вы хотите, чтобы пользователи были ограничены только своей домашней папкой, то необходимо раскомментировать эти строчки:
chroot_local_user=YES
allow_writeable_chroot=YES
Первая строчка указывает, что нужно разместить пользователя в изолированном домашнем каталоге, а вторая, что ему можно разрешить запись в этот каталог. Настройка FTP в Uncom OS завершена, сохраните изменения в конфигурационном файле и перезапустите vsftpd
:
sudo systemctl restart vsftpd
Статус службы vsftpd можно проверить командой:
sudo systemctl status vsftpd
Сервер готов, но система настроена ещё не полностью. Сначала создадим нашего тестового пользователя с помощью useradd:
sudo useradd -m -c "Test User" -s /bin/bash testuser
sudo passwd testuser
Поскольку мы хотим подключаться от его имени к FTP-серверу, то нам нужно добавить его в vsftpd.userlist
:
echo "testuser" | sudo tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist
Теперь попробуем подключиться к нашему FTP-серверу через терминал и проверить его работу.
Попробуем войти от имени анонимного пользователя:
Анонимный вход запрещён.
Теперь попробуем войти от имени нашего тестового пользователя:
Подключение установлено.
Чтобы хоть как-то обойти проблемы с безопасностью, вы можете использовать другую папку вместо домашней для предоставления её пользователю. Сначала создадим такую папку для нашего пользователя:
sudo mkdir -p /home/testuser/ftp/files
Уберём право на запись для папки ftp:
sudo chown nobody:nogroup /home/testuser/ftp
sudo chmod a-w /home/testuser/ftp
Затем дайте необходимые полномочия пользователю на запись в подпапку.
sudo chown -R testuser:testuser /home/testuser/ftp/files
sudo chmod -R 0770 /home/testuser/ftp/files/
Теперь вернёмся к конфигурационному файлу vsftpd.conf. Сначала закомментируйте строчку:
allow_writeable_chroot = YES
Теперь добавьте такие строчки:
user_sub_token=$USER
local_root=/home/$USER/ftp
Первая из них добавляет переменную $USER, в которой содержится имя пользователя, а вторая задаёт корневую папку для каждого пользователя. Осталось снова перезапустить FTP-сервер:
sudo systemctl restart vsftpd
Теперь вы можете снова войти от имени этого пользователя и увидите, что сейчас используется указанная нами папка.
Откройте файловый менеджер, во вкладке "Другие расположения" найдите внизу строку "Ввести адрес сервера". Вам необходимо указать протокол подключения, после чего нажать "Подключиться"^
Анонимный доступ всё ещё запрещён, попытка подключиться анонимно приведёт к бесконечному переоткрытию окна авторизации:
Подключимся к серверу с использованием учетных данных пользователя testuser:
Откроется окно с настроенными папками общего доступа на FTP-сервере:
Скопируем в папку Files несколько файлов, откроем их на сервере и проверим, что данные скопировались успешно:
Для отключения от FTP-сервера используйте функцию "Отключить".
При написании данной статьи использовались материалы с
https://losst.pro/ustanovka-ftp-na-ubuntu-16-04
Материалы распространяются под лицензией Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)