Ubuntu – Ошибка конфигурации VSFTPD для FTP при перезапуске

Вопрос или проблема

Мне нужно настроить FTP-сервер в моей виртуальной машине Ubuntu, но у меня возникают проблемы с конфигурацией файла настроек в VSFTPD.

В онлайн-руководствах я вижу, что выбираются разные параметры и приводится разное обоснование. Мне просто нужна простая и безопасная конфигурация без включения настроек, которые я не понимаю.

На данный момент я выбрал следующие параметры в /etc/vsftpd.conf

Listen=NO
Anonymous_enable=NO
Local_enable=YES
wrtite_enable=YES
dirmessage_enable=YES
use_localtime=YES
connect_from_port_20=YES
xferlog_enable=YES
ftpd_banner=Welcome to Toms FTP Server.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Насколько я понимаю, эти параметры делают следующее:

listen включает автономный режим, anonymous запрещает вход без проверки, write позволяет записывать файлы, dir message объясняет директорию, local time используется для датирования файлов, порт 20 – само собой разумеющееся, xferlog – это создание/формат логов?, баннер – само собой разумеющееся, chroot ограничивает пользователей в их директориях, пользователи, не ограниченные в их директориях, перечислены в chroot_list.

Проблема, с которой я сталкиваюсь, заключается в том, что я продолжаю видеть ссылки в руководствах на userlist, который указывает, какие пользователи имеют доступ, например:

user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Этого нет в моем файле, и всякий раз, когда я пытаюсь ввести это вручную, мой VSFTPD не запускается при перезапуске, я вижу это почти в каждом руководстве, но это не содержится в моих конфигурационных файлах???

Я пытаюсь настроить это неправильно?

Каковы минимальные требования для безопасной конфигурации VSFTPD?

Это userlist больше не поддерживается?

Нужен ли мне вообще этот userlist?

ошибка не исчезает даже после удаления этих файлов и повторного перезапуска, это полностью ломает сервис, и каждый раз требуется переустановка, ошибка следующая:

systemctl status vsftpd.service

● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2020-04-26 13:58:09 UTC; 14min ago
  Process: 30588 ExecStart=/usr/sbin/vsftpd /etc/vsftpd.conf (code=exited, status=2)
  Process: 30584 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
 Main PID: 30588 (code=exited, status=2)

Apr 26 13:58:09 ubuntu systemd[1]: Starting vsftpd FTP server...
Apr 26 13:58:09 ubuntu systemd[1]: Started vsftpd FTP server.
Apr 26 13:58:09 ubuntu systemd[1]: vsftpd.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Apr 26 13:58:09 ubuntu systemd[1]: vsftpd.service: Failed with result 'exit-code'.

Закомментируйте (или удалите) use_localtime и попробуйте снова.

#use_localtime=YES

listen=NO означает, что что-то другое обрабатывает прослушивание входящих сетевых соединений – это может быть классический inetd, xinetd или .socket юнит systemd.

Смысл в том, что при конфигурации с listen=NO vsftpd предполагает, что то, что запустило процесс vsftpd, сразу же передаст ему входящее соединение, и как только это соединение закончится, vsftpd может завершить работу, так как то, что запустило vsftpd, будет запускать новый экземпляр для каждого нового соединения. Если конфигурируется таким образом и запускается с помощью простого systemctl start vsftpd, то vsftpd ожидает, что systemd передаст ему сетевой сокет, подключенный к стандартному вводу/выводу процесса vsftpd.

Но так как ваш vsftpd.service юнит явно не настроен для такого типа передачи сокета (требуется как минимум строка StandardInput=socket и соответствующий юнит vsftpd.socket), процесс vsftpd получает стандартный ввод/вывод, который не является одиночным двунаправленным сетевым сокетом, и в результате выходит с ошибкой “invalid argument”.

Если вы планируете запускать vsftpd с помощью systemctl start vsftpd.service, то vsftpd будет отвечать за прослушивание входящих FTP соединений, и он должен быть настроен с listen=YES.

Файл userlist_file, если вы решите его использовать, должен указывать на файл с простым списком имен пользователей, по одному на каждой строке. Если userlist_deny=NO, то пользователи, указанные в файле, будут единственными, кому разрешен вход через FTP. Если вместо этого используется настройка userlist_deny=YES, то пользователи, указанные в списке, будут всегда отклоняться, даже до запроса пароля.

.

Ответ или решение

Настройка FTP-сервера с использованием VSFTPD на Ubuntu — это популярный способ организовать обмен файлами в локальной или даже публичной сети. Однако, как показывает ваш опыт, конфигурация может столкнуться с трудностями, особенно если руководствоваться различными обучающими материалами, которые предлагают разные подходы. Давайте разберем и попробуем сделать настройки более понятными, а также предложить решение вашей проблемы.

Теория

VSFTPD (Very Secure FTP Daemon) — это популярный FTP-сервер, известный своей стабильностью и безопасностью. При конфигурации этого демона следует обратить внимание на следующие основные аспекты:

  1. Режим прослушивания (Listen mode): Определяет, будет ли VSFTPD работать в режиме демона или нет.
  2. Анонимный и локальный доступ: Настройки безопасности, такие как разрешение или запрещение анонимного доступа и управление доступом для локальных пользователей.
  3. Запись и чтение файлов: Регулирует разрешения на изменение файлов.
  4. Чистота и безопасность: Ограничение доступа пользователей к их собственным директориям и ведение журналов для аудита.

Пример

Ваш текущий файл конфигурации /etc/vsftpd.conf содержит следующее:

Listen=NO
Anonymous_enable=NO
Local_enable=YES
wrtite_enable=YES
dirmessage_enable=YES
use_localtime=YES
connect_from_port_20=YES
xferlog_enable=YES
ftpd_banner=Welcome to Toms FTP Server.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Однако возникают проблемы с добавлением параметров, связанных с пользовательским списком (userlist). Чтобы избежать конфликтов, давайте проанализируем каждую из этих настроек и их взаимодействие.

Применение

  1. Режим прослушивания: У вас установлено Listen=NO, что указывает на то, что VSFTPD не будет работать как самостоятельный демон. Это может вызвать проблемы при использовании в стандартных системах без дополнительной конфигурации. Для вашего случая более уместно использовать Listen=YES, если вы планируете управлять сервером через systemctl.

  2. Анонимные и локальные пользователи: Правильно настроено запрещение анонимных соединений (Anonymous_enable=NO). Это повышает уровень безопасности, так как доступ будут иметь только зарегистрированные пользователи. Локальным пользователям доступ разрешен (Local_enable=YES).

  3. Запись и другие функции: Включена опция записи файлов (wrtite_enable=YES), но в конфигурации допущена ошибка в написании — правильный параметр write_enable. Проследите за грамотностью команды. Остальные функции, такие как сообщение директории (dirmessage_enable=YES), использование локального времени (use_localtime=YES), должны быть пересмотрены в контексте вашего использования. Например, use_localtime рекомендуется закомментировать, как указано в вашем тексте.

  4. Безопасность (chroot): Параметр chroot_local_user=YES гарантирует, что пользователи остаются в своих домашней директории, что повышает уровень безопасности. Применение chroot_list_enable=YES и указание списка chroot_list_file=/etc/vsftpd.chroot_list позволяет исключать некоторых пользователей из этой директивы в зависимости от требований.

  5. Пользовательские списки: Что касается пользовательских списков, использование параметров userlist_enable=YES, userlist_file=/etc/vsftpd.userlist, userlist_deny=NO накладывает ограничения на пользователей, разрешая доступ только тем, кто указан в файле. Если это вызывает ошибки, возможно, стоит проверить доступность и корректность указанного файла или же рассмотреть необходимость этой функции в вашем случае, если стандартных механизмов аутентификации достаточно.

  6. Ошибки: Ошибки, такие как code=exited, status=2/INVALIDARGUMENT, как указывает текст, чаще всего связаны с неправильной конфигурацией или отсутствием нужных ресурсов, переданных дождемону. Это также может случаться из-за несоответствий в синтаксисе или попытках внедрения несовместимых настроек из разных руководств.

Чтобы ошибки исчезли, уберите (или закомментируйте) строку use_localtime=YES, как указано, и установите listen=YES для демонстрации способа, который поддерживает systemd.

Итак, если планируете управлять VSFTPD с помощью systemctl, вам нужно использовать listen=YES и выложить настройки с исправленным синтаксисом. Эти шаги должны также убрать вероятность получения ошибки при перезагрузках сервиса.

Заключение

Создание стабильного и безопасного FTP-сервера требует не только понимания каждой директки, но и точного исполнения всех пунктов конфигурации. Убедитесь, что ваши файлы конфигурации свободны от ошибок синтаксиса, таких как в случае параметра wrtite_enable, и соблюдайте рекомендации по безопастности.

Надеюсь, эти советы помогут вам успешно настроить ваш FTP сервер. Если останутся еще вопросы или проблемы, стоит обратиться к дополнительной документации на сайте VSFTPD или в сообщество для более детальной помощи.

Оцените материал
Добавить комментарий

Капча загружается...