Настройка vsftpd






Продолжая тему, начатую в предыдущей заметке о быстром и безопасном FTP-сервере vsftpd, сегодня мы рассмотрим базовые моменты конфигурирования этого демона. Здесь я рассмотрел наиболее часто, на мой взгляд, применяемые параметры конфигурирования vsftpd. Не забывайте, что vsftpd очень гибок в настройке и вы всегда можете настроить его каким-то особым для себя образом. Все возможные параметры конфигурации подробно описаны а man-странице демона, которую очень рекомендую хотя бы к беглому просмотру всем интересующимся и использующим этот сервер. В будущих статьях, посвящённых vsftpd, мы рассмотрим такие моменты, как организацию виртуальных FTP-хостов, аутентификацию виртуальных пользователей и SSL-шифрование.


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

  • в FreeBSD — /usr/local/etc/vsftpd.conf
  • в Fedora — /etc/vsftpd/vsftpd.conf
  • в Debian — /etc/vsftpd.conf

После внесения изменений в конфигурационный файл вашего vsftpd не забывайте перезапускать его. В FreeBSD:

В Debian/Fedora:

Управление доступом

Обратите внимание на то, что в процессе установки vsftp в вашу систему добавляется пользователь с именем учётной записи ftp. Предназначение этой учётной записи — организация доступа к каталогу анонимного FTP. По умолчанию vsftpd разрешает доступ на чтение анонимным пользователям к домашнему каталогу учётной записи ftp. Не забудьте отключить его, если это вам не нужно, изменив значение соответствующего параметра:

Если же доступ анонимных пользователей к вашему FTP-серверу разрешён, дополнительно вы можете отключить запрос пароля при анонимном логине:

Доступ локальных пользователей системы по умолчанию обычно отключён. Включить его при необходимости можно следующим образом:

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

Также можно использовать другой способ chroot пользователей, при котором ограничиваться будут не все пользователи, а лишь явно определённые. Для этого необходимо установить значение параметра chroot_local_user равным NO, создать файл с перечнем пользователей для которых chroot должен действовать (например, в /etc/vsftpd.chroot_list) и определить следующие два параметра:

Обратите внимание на то, что если при определённых выше двух параметрах значение параметра chroot_local_user является равным YES, то учётные записи, перечисленные в файле chroot_list_file НЕ будут попадать под ограничения chroot.

Если вы хотите ограничить количество одновременных соединений к vsftpd, есть два способа сделать это: при помощи возможностей суперсервера xinetd или, если ваш демон работает в автономном режиме, при помощи параметра (естественно 10 заменив на нужное вам количество допустимых одновременных подключений):

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

После того, как в конфигурации вашего сервера параметр write_enable установлен равным YES и anonymous_enable определён как YES вы можете управлять доступом относительно операций создания новых файлов/каталогов анонимными пользователями. Разрешить создавать новые каталоги анонимам:

Разрешить анонимным пользователям удалять и переименовывать файлы и каталоги:

Разрешить анонимам загружать новые файлы:

Ограничить скорость обмена данными для анонимных пользователей в автономном режиме сервера можно следующим параметром (значение указывается в байтах/сек):

По умолчанию umask файлов vsftpd использует равный 077, то есть файлы создаются доступными на чтение/запись только для владельца. Изменить значение umask анонимных пользователей можно при помощи параметра anon_umask:

а для локальных — при помощи параметра local_umask:

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

Иногда бывает полезно скрыть реальные идентификаторы владельцев файлов, заменив их на идентификатор пользователя ftp:

Сетевые параметры

Если ваш vsftpd запускается в автономном режиме, а не через xinetd, тогда необходимо явно указать это:

то же, для IPv6 (помните, что демон может работать одновременно только либо с IPv4, либо с IPv6):

Определить IPv4 адрес, на который должен «вешаться» демон, можно параметром:

Для IPv6:

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

Разное

Начиная с версии 2.0.7 vsftpd умеет удалять неудавшиеся закачки, если определить следующий параметр:

По умолчанию vsftpd отображает таймштампы файлов в GMT. Если вам нужно, чтобы они отображались согласно локальному времени сервера, воспользуйтесь следующим параметром:




Настройка vsftpd: 38 комментариев

  1. Спасибо за статью. Если позволите, вопрос —

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

    То есть если пользователь ftpuser создал файл test в директории /ftp, то реально owner и grp-owner файла test будут local-user.

  2. bronweg, создаёте пользователя owner и делаете для него основной группу grp-owner. Далее, в конфиге vsftpd.conf:

    guest_enable=YES

    guest_username=owner

    Только пользователь ftpuser не должен быть локальным по отношению к системе.

  3. на самом деле в случае с анонимным пользователем есть параметры chown_uploads=YES и chown_username=your_user

  4. Как сделать чтобы в папке, в которую выходит пользователь при подключении, были видны только файлы с определённым расширением?

  5. Опечатка? в этом абзаце, видимо, не NO, а YES:

    «Обратите внимание на то, что если при определённых выше двух параметрах значение параметра chroot_local_user является равным NO, то учётные записи, перечисленные в файле chroot_list_file НЕ будут попадать под ограничения chroot.»

  6. Помогите пожалуста. я удали папку pub на фтп и теперь немогу зайти на него. видает ошыбку 500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/var/ftp/pub

  7. Тут такое дело, добрый вечер!

    Решил на удаленной машине (ubuntu) поднять ftp server vsftpd. (Мой комп)(ftp-server). Туда подключаюсь и настраеваю через ssh (22 port). Вроде бы настроил vsftpd.conf, ftp локально заработал и можно зайти на ftp через машины из одной подсети, но через удаленный (через мой комп) доступ запрещен. При попытки подключения, он проходит авторизацию, но не заходит((( помогите пожалуйста. Не могу найти ответ на свой вопрос, может не там ищу.

    PS. Когда через свой комп набираю ftp : он заходит, можно использовать команды: pwd, mkd, cd,. то есть можно создавать, удалять, переходить по папкам, но выводить список файлов и каталогов нет, то есть ls не работает(((

  8. C:\Users\a.vafin>ftp X.X.6.179

    Связь с X.X.6.179.

    220 (vsFTPd 2.3.2)

    Пользователь (X.X.6.179:(none)): dev1

    331 Please specify the password.

    Пароль:

    230 Login successful.

    ftp> pwd

    257 «/»

    ftp> mkd newfolder

    257 «/newfolder» created

    ftp> cd newfolder

    250 Directory successfully changed.

    ftp> pwd

    257 «/newfolder»

    ftp> cd /

    250 Directory successfully changed.

    ftp> pwd

    257 «/»

    ftp> ls

    500 Illegal PORT command.

    425 Use PORT or PASV first.

    ftp> pwd

    257 «/»

    ftp> quit

    А вот что в логах на Х.Х.6.179 машине vsftpd написал:

    Thu Apr 5 19:31:28 2012 [pid 2] CONNECT: Client «X.X.6.250»

    Thu Apr 5 19:31:36 2012 [pid 1] [dev1] OK LOGIN: Client «X.X.6.250»

    Thu Apr 5 19:32:02 2012 [pid 3] [dev1] OK MKDIR: Client «X.X.6.250», «/newfolder»

  9. А вот расширенный лог.

    Thu Apr 5 23:08:23 2012 [pid 2] CONNECT: Client «x.x.6.250»

    Thu Apr 5 23:08:23 2012 [pid 2] FTP response: Client «x.x.6.250», «220 (vsFTPd 2.3.2)»

    Thu Apr 5 23:08:23 2012 [pid 2] FTP command: Client «x.x.6.250», «USER dev3»

    Thu Apr 5 23:08:23 2012 [pid 2] [dev3] FTP response: Client «x.x.6.250», «331 Please specify the password.»

    Thu Apr 5 23:08:23 2012 [pid 2] [dev3] FTP command: Client «x.x.6.250», "PASS "

    Thu Apr 5 23:08:24 2012 [pid 1] [dev3] OK LOGIN: Client «x.x.6.250»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «230 Login successful.»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP command: Client «x.x.6.250», «SYST»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «215 UNIX Type: L8»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP command: Client «x.x.6.250», «PWD»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «257 „/“»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP command: Client «x.x.6.250», «TYPE A»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «200 Switching to ASCII mode.»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP command: Client «x.x.6.250», «REST 0»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «350 Restart position accepted (0).»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP command: Client «x.x.6.250», «PASV»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «227 Entering Passive Mode (x,x,6,179,188,57).»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP command: Client «x.x.6.250», «LIST»

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «425 Security: Bad IP connecting.»

    Thu Apr 5 23:10:06 2012 [pid 2] CONNECT: Client «x.x.6.45»

    Thu Apr 5 23:10:06 2012 [pid 2] FTP response: Client «x.x.6.45», «220 (vsFTPd 2.3.2)»

    Thu Apr 5 23:10:06 2012 [pid 2] FTP command: Client «x.x.6.45», «USER dev1»

    Thu Apr 5 23:10:06 2012 [pid 2] [dev1] FTP response: Client «x.x.6.45», «331 Please specify the password.»

    Thu Apr 5 23:10:06 2012 [pid 2] [dev1] FTP command: Client «x.x.6.45», "PASS "

    Thu Apr 5 23:10:06 2012 [pid 1] [dev1] OK LOGIN: Client «x.x.6.45»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «230 Login successful.»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «SYST»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «215 UNIX Type: L8»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «PWD»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «257 „/“»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «TYPE I»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «200 Switching to Binary mode.»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «REST 0»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «350 Restart position accepted (0).»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «PWD»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «257 „/“»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «PASV»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «227 Entering Passive Mode (x,x,6,179,252,21).»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «TYPE A»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «200 Switching to ASCII mode.»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «LIST»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «150 Here comes the directory listing.»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «226 Directory send OK.»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP command: Client «x.x.6.45», «TYPE I»

    Thu Apr 5 23:10:07 2012 [pid 3] [dev1] FTP response: Client «x.x.6.45», «200 Switching to Binary mode.»

  10. ainur, обратите внимание на три момента в ваших логах:

    500 Illegal PORT command.

    425 Use PORT or PASV first.

    Thu Apr 5 23:08:24 2012 [pid 3] [dev3] FTP response: Client «x.x.6.250», «425 Security: Bad IP connecting.»

  11. В vsftpd.conf указал следующий параметр:

    #listen_port=2021

    И после этого через far на удаленном компе соединился, указав пассивный режим,

    IP-servera:2021

    И все нормально заходит. Мое мнение такое, может и ошибочное. Возможно, 21 порт на шлюзе чем-то занят или закрыт. Подправьте меня.

  12. ainur, я так понимаю, с удалённой системы, находящейся ЗА шлюзом, вы можете подключиться к вашему серверу, авторизоваться, однако не работает команда ls. Правильно?

  13. да через командную строку ввожу ls и она мне пишет:

    C:\Users\a.vafin>ftp

    ftp> open x.x.6.179 2021

    Связь с x.x.6.179.

    220 (vsFTPd 2.3.2)

    Пользователь (x.x.6.179:(none)): user

    331 Please specify the password.

    Пароль:

    230 Login successful.

    ftp> pwd

    257 «/»

    ftp> ls

    500 Illegal PORT command.

    425 Use PORT or PASV first.

    ftp>

  14. ainur, ну правильно вам сервер пишет:

    500 Illegal PORT command.

    425 Use PORT or PASV first.

    Вы не сообщаете серверу в каком режиме ему передавать данные: в активном или пассивном.

  15. а почему через 21 порт не работает? И где мне надо указать в каком режиме передовать данные?

  16. При нахождении ftp-сервера за NAT, следует явно указать в настройках сервера его адрес. Я правильно понимаю?

    1. ainur, при нахождении сервера за NAT, клиент должен использовать пассивный режим.

  17. а я же и так использую пассивный режим. Просто если я в vsftpd.conf указываю listen_port=2112 или другой, но не 21, то через удаленный компьютер я могу заходить на ftp (указываю пассивный режим), например через far. Но если указать или закоментить listen_port, то он ругается и не пускает.

  18. ainur, стало быть, ваш шлюз либо не редиректит 21й порт на ваш сервер, либо сам его слушает.

  19. в той подсети, где vsftpd есть еще одна машина, там стоит Filezilla — сервер. И он работает без проблем. Его тоже я настраивал, и проблем вообще не было.

  20. да. туда я могу попасть так и из лакали и из удаленной машины, в пассивном режиме.

    ps/

    Вот еще что-то нашел в инете. Подключение этих модулей интересно решит проблему?

    modprobe ip_conntrack_ftp

    modprobe ip_nat_ftp

  21. > да. туда я могу попасть так и из лакали и из удаленной машины, в пассивном режиме

    Значит, ваш роутер заворачивает 21й порт на машину с файлзиллой

    > Вот еще что-то нашел в инете. Подключение этих модулей интересно решит проблему? modprobe ip_conntrack_ftp modprobe ip_nat_ftp

    Нет, не решит.

  22. ainur, на роутере в первую чоередь. Смотреть, на какой хост в LAN он направляет входящий трафик 21го порта.

  23. как можно востановить соединение если набрал команду: iptables -p input drop ((( соединение производилось только с помощью putty

  24. >как можно восстановить соединение если набрал команду: iptables -p input drop

    понимаю, это у же не по теме))

    соединение восстановил, но проблема с доступом через 21 порт не решена.

  25. ainur, вы так и не ответили. Вы посмотрели, куда у вас роутер заворачивает входящий трафик на 21го порта? Из ваших рассказов следует, что идёт на машину с файлзиллой. Правильно?

  26. к сожалению, у меня нет доступа к роутеру. но когда файлзилу настраивал там я тоже не чего не прописывал.

Комментарии запрещены.