Вопрос или проблема
Мне нужно настроить 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-сервер, известный своей стабильностью и безопасностью. При конфигурации этого демона следует обратить внимание на следующие основные аспекты:
- Режим прослушивания (Listen mode): Определяет, будет ли 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
Однако возникают проблемы с добавлением параметров, связанных с пользовательским списком (userlist
). Чтобы избежать конфликтов, давайте проанализируем каждую из этих настроек и их взаимодействие.
Применение
-
Режим прослушивания: У вас установлено
Listen=NO
, что указывает на то, что VSFTPD не будет работать как самостоятельный демон. Это может вызвать проблемы при использовании в стандартных системах без дополнительной конфигурации. Для вашего случая более уместно использоватьListen=YES
, если вы планируете управлять сервером черезsystemctl
. -
Анонимные и локальные пользователи: Правильно настроено запрещение анонимных соединений (
Anonymous_enable=NO
). Это повышает уровень безопасности, так как доступ будут иметь только зарегистрированные пользователи. Локальным пользователям доступ разрешен (Local_enable=YES
). -
Запись и другие функции: Включена опция записи файлов (
wrtite_enable=YES
), но в конфигурации допущена ошибка в написании — правильный параметрwrite_enable
. Проследите за грамотностью команды. Остальные функции, такие как сообщение директории (dirmessage_enable=YES
), использование локального времени (use_localtime=YES
), должны быть пересмотрены в контексте вашего использования. Например,use_localtime
рекомендуется закомментировать, как указано в вашем тексте. -
Безопасность (chroot): Параметр
chroot_local_user=YES
гарантирует, что пользователи остаются в своих домашней директории, что повышает уровень безопасности. Применениеchroot_list_enable=YES
и указание спискаchroot_list_file=/etc/vsftpd.chroot_list
позволяет исключать некоторых пользователей из этой директивы в зависимости от требований. -
Пользовательские списки: Что касается пользовательских списков, использование параметров
userlist_enable=YES
,userlist_file=/etc/vsftpd.userlist
,userlist_deny=NO
накладывает ограничения на пользователей, разрешая доступ только тем, кто указан в файле. Если это вызывает ошибки, возможно, стоит проверить доступность и корректность указанного файла или же рассмотреть необходимость этой функции в вашем случае, если стандартных механизмов аутентификации достаточно. -
Ошибки: Ошибки, такие как
code=exited, status=2/INVALIDARGUMENT
, как указывает текст, чаще всего связаны с неправильной конфигурацией или отсутствием нужных ресурсов, переданных дождемону. Это также может случаться из-за несоответствий в синтаксисе или попытках внедрения несовместимых настроек из разных руководств.
Чтобы ошибки исчезли, уберите (или закомментируйте) строку use_localtime=YES
, как указано, и установите listen=YES
для демонстрации способа, который поддерживает systemd
.
Итак, если планируете управлять VSFTPD с помощью systemctl
, вам нужно использовать listen=YES
и выложить настройки с исправленным синтаксисом. Эти шаги должны также убрать вероятность получения ошибки при перезагрузках сервиса.
Заключение
Создание стабильного и безопасного FTP-сервера требует не только понимания каждой директки, но и точного исполнения всех пунктов конфигурации. Убедитесь, что ваши файлы конфигурации свободны от ошибок синтаксиса, таких как в случае параметра wrtite_enable
, и соблюдайте рекомендации по безопастности.
Надеюсь, эти советы помогут вам успешно настроить ваш FTP сервер. Если останутся еще вопросы или проблемы, стоит обратиться к дополнительной документации на сайте VSFTPD или в сообщество для более детальной помощи.