Правила доступа анонимного пользователя
ПроблематикаДовольно часто возникает ситуация, когда необходимо одним пользователям предоставить анонимный доступ к серверу на чтение-запись, другим только на чтение, третьих вообще не пускать. Стандартными средствами это было достаточно проблематично реализовать. Поэтому было разработано расширение, позволяющее достаточно быстро произвести соответствующую настройку и не требующее перезапуска сервера. Также данное расширение позволяет указывать правильный IP адрес в ответе на команду PASV (это справедливо, когда vsftpd работает с IPv4).
Настройка
Для настройки данного расширения в конфигурационный файл были добавлены два параметра.
В параметре pasv_addr_rules указывается путь до файла с правилами доступа анонимных пользователей к серверу. По-умолчанию данный параметр указывает на файл /etc/vsftpd/pasv_rules.
Параметр add_default_rule указывает серверу добавлять в конец правило по умолчанию, которое собирается из уже заданных настроек самого сервера в конфигурационном файле или нет. Данный параметр может принимать значения 0 или No для отключения этого свойства. Значения 1 или Yes это свойство сервера включают. По умолчанию данный параметр отключен.
Примеры правил
Для понимания принципов работы правил рассмотрим два варианта: для работы с IPv4 и IPv6. Все представленные IP адреса указаны для примера и не принадлежат какой-либо сети.
IPv41 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):
|
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. |
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.