eng | rus

vsFTPd

Probably the most secure and fastest FTP server for UNIX-like systems.

Правила доступа анонимного пользователя

Проблематика

Довольно часто возникает ситуация, когда необходимо одним пользователям предоставить анонимный доступ к серверу на чтение-запись, другим только на чтение, третьих вообще не пускать. Стандартными средствами это было достаточно проблематично реализовать. Поэтому было разработано расширение, позволяющее достаточно быстро произвести соответствующую настройку и не требующее перезапуска сервера. Также данное расширение позволяет указывать правильный IP адрес в ответе на команду PASV (это справедливо, когда vsftpd работает с IPv4).


Настройка

Для настройки данного расширения в конфигурационный файл были добавлены два параметра.

В параметре pasv_addr_rules указывается путь до файла с правилами доступа анонимных пользователей к серверу. По-умолчанию данный параметр указывает на файл /etc/vsftpd/pasv_rules.

Параметр add_default_rule указывает серверу добавлять в конец правило по умолчанию, которое собирается из уже заданных настроек самого сервера в конфигурационном файле или нет. Данный параметр может принимать значения 0 или No для отключения этого свойства. Значения 1 или Yes это свойство сервера включают. По умолчанию данный параметр отключен.


Примеры правил

Для понимания принципов работы правил рассмотрим два варианта: для работы с IPv4 и IPv6. Все представленные IP адреса указаны для примера и не принадлежат какой-либо сети.

IPv4
1
2
3
4
5
6
7
# LocalIP       RemoteMask      PassiveAddress  rem_char  anon  anon_upl  anon_md  anon_oth  anon_del
0.0.0.0         192.168.20.0/24 0.0.0.0             UTF8   yes       yes      yes       yes       yes
10.15.147.237   10.15.0.0/16    10.15.147.237              yes
10.15.147.237   0.0.0.0/0       dynip.my_isp1.co            no
10.12.207.21    10.12.0.0/16    10.12.207.21     WIN1251   yes       yes      yes       yes        no
10.12.207.21    172.0.0.0/8     10.12.207.21       CP878   yes       yes      yes       yes        no
10.12.207.21    0.0.0.0/0       dynip.my_isp2.co           yes        no       no        no        no

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

LocalIP Данное поле содержит в себе адрес, который есть у сервера. Используется для отбора правил, соответствующих адресу, но который пришло соединение со стороны клиента. Если на машине, где запушен vsftpd есть несколько сетевых интерфейсов со своими адресами и есть сеть, которой мы хотим задать единое правило в независимости от того на какой адрес пришло соединение, то можно в данном поле указать адрес 0.0.0.0.
RemoteMask Данное поле содержит маску подсети, по которой идет фильтрация правил. Маска может быть задана как aaa.aaa.aaa.aaa/xx, так и в виде aaa.aaa.aaa.aaa/xxx.xxx.xxx.xxx.
PassiveAddress В данном поле указывается адрес, который будет выдаваться клиенту по команде PASV. Как, наверное обратили внимание, данное поле может принимать либо IP адрес, либо его символьное значение. Данное поле уже не учавствует в фильтрации правил, а используется как результат выбора правила. Если в данном поле указан(o):
  • 0.0.0.0, то клиенту будет возвращаться адрес, с которым он соединился;
  • символьное значение адреса, то будет произведено его преобразование в IP
  • IP адрес, то он и будет использоваться в ответах на команду PASV.
rem_char Данное поле является не обязательным. В нем указывается кодовая страница клиента по умолчанию. Если значение не задано, то будет использоваться заданное в конфигурационном файле в параметре remote_charset.
anon Данное поле является не обязательным. Здесь мы указываем, есть ли доступ к серверу у анонимного пользователя или нет. Может принимать значения: 0, 1, No, Yes, False или True. Если поле не заполнено, то будет использоваться значение заданное в конфигурационном файле в параметре anonymois_enable.
anon_upl Данное поле является не обязательным, но его нельзя задать без предыдущего поля. Здесь мы указываем, может ли анонимный пользователь закачивать на сервер файлы. Поле может принимать значения: 0, 1, No, Yes, False или True. Если поле не заполнено, то будет использоваться значение заданное в конфигурационном файле в параметре anon_upload_enable.
anon_md Данное поле является не обязательным, но его нельзя задать без предыдущего поля. Выставляя значение 0, 1, No, Yes, False или True, мы запрещаем или разрешаем пользователю создавать каталоги. Если данное поле не заполнить, то будет использоваться значение заданное в конфигурационном файле в параметре anon_mkdir_write_enable.
anon_oth Данное поле является не обязательным, но его нельзя задать без предыдущего поля. Значение, выставленное в этом поле, указывает серверу о необходимости разрешить или запретить пользователю операции отличные от загрузки файлов или создания каталогов, такие как переименовывание файлов или удаление. Поле может принимать значения: 0, 1, No, Yes, False или True. Если поле не заполнено, то будет использоваться значение заданное в конфигурационном файле в параметре anon_other_write_enable.
anon_del Данное поле является не обязательным, но его нельзя задать без предыдущего поля. Здесь мы указываем, может ли анонимный пользователь удалять файлы на сервере. Поле может принимать значения: 0, 1, No, Yes, False или True. Если поле не заполнено, то будет использоваться значение заданное в конфигурационном файле в параметре anon_delete_enable.
IPv6
1
2
3
4
# LocalIP         RemoteMask               PassiveAddress  rem_char  anon  anon_upl  anon_md  anon_oth  anon_del
::                ::ffff:192.168.20.0/120  ::               WIN1251   yes       yes      yes       yes       yes
::                2002:aabb:ccdd:1000::/56 ::                  UTF8   yes       yes      yes       yes       yes
2002:aabb:ccdd::1 ::/0                     ::                          no

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

LocalIP Данное поле содержит в себе IPv6-адрес, который есть у сервера. Используется для отбора правил, соответствующих адресу, но который пришло соединение со стороны клиента. Если на машине, где запушен vsftpd есть несколько сетевых интерфейсов со своими адресами и есть сеть, которой мы хотим задать единое правило в независимости от того на какой адрес пришло соединение, то можно в данном поле указать ::.
RemoteMask Данное поле содержит маску подсети, по которой идет фильтрация правил. Так как на данный момент в обиходе IPv4 и IPv6, то к серверу c включенным IPv6 могут обратиться пользователи с IPv4-адресов. Поэтому маска подсети клиента может задаваться двумя видами: стандартным для IPv6 и специальной для IPv4 как представлено в строке 1 примера.
PassiveAddress Данное поле в IPv6 не используется и оставлено для совместимости. Его надо заполнять :: (двумя двоеточиями).

Остальные поля аналогичны в заполнении как и для IPv4.

Valid HTML 4.01 Transitional