Translation(s): Русский

(!) ?Обсуждения


vsftpd >> EXAMPLE >> VIRTUAL_USERS

Перевод официальной документации VIRTUAL_USERS из каталога EXAMPLE

VIRTUAL_USERS


Этот пример показывает как установить vsftpd/PAM с "виртуальными пользователями". Виртуальный пользователь - это пользовательский логин, который не существует как реальный логин на системе. Виртуальные пользователи более безопасные чем настоящие пользователи, потому что представляющая угрозу учётная запись используется только FTP-сервером.

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

Шаг 1) Создание базы данных виртуальных пользователей.


Для создания базы данных виртуальных пользователей в vsftpd используется "pam_userdb", чтобы аутентифицировать виртуальных пользователей.

Примечание переводчика: PAM - это Pluggable Authentication Modules, иначе говоря, это целый framework в системе для аутентификации пользователей. PAM позволяет использовать ЛЮБУЮ, ДОСТУПНУЮ аутентификацию пользователей, если приложение написано с поддержкой PAM. Иначе говоря, вместо "pam_userdb", для виртуальных пользователей vsftpd, можно использовать ЛЮБОЙ подходящий модуль PAM, который на вас лучше смотрит. Так как, по задумке авторов vsftpd, аутентификация в PAM происходит с использованием модуля "pam_userdb.so", иначе говоря, для успешной аутентификации пользователь должен пройти через указанный модуль, и содержимое этой главы представляет собой перевод официального руководства, то далее по тексту содержимого этой статьи следует описание аутентификации пользователей vsftpd в PAM только с использованием модуля "pam_userdb".

Примечание переводчика: В операционной системе Debian GNU/Linux 6.0 (Squeeze), в числе зависимостей пакета vsftpd с программой vsftpd, находится библиотека PAM (libpam0g) и подключаемые модули аутентификации для PAM (libpam-modules), где, в последнем пакете, в числе модулей, присутствует необходимая библиотека "pam_userdb.so".

Перевод руководства страницы man для библиотеки pam_userdb(8) доступен ?здесь

Примечание переводчика: Обратите внимание, что среди зависимостей пакета libpam-modules, присутствуют библиотеки СУБД Berkeley v4.8 (libdb4.8). Иначе говоря, vsftpd для авторизации через PAM использует базу данных в формате СУБД Berkeley v4.8.

Для "pam_userdb" потребуется файл, содержащий логин пользователя/пароль, в формате базы данных "db" - формат общей базы данных.

Для того, чтобы создать файл формата базы данных "db", сначала создайте файл с обычным простым текстом (plain text), в котором указывается имя пользователя и, на следущей строчке, пароль, чередуя для каждой одной пары логин/пароль две строчки - логин<разрыв строки>пароль. Выглядит это, к примеру, так:

mary
123456
jack
654321

В качестве примера смотрите файл "logins.txt" - где указывается логин "tom" с паролем "foo" и "fred" с паролем "bar".

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

# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db

(Требует установленную программу по использованию Berkeley db (база данных Беркли)).

ЗАМЕЧАНИЕ: на многих системах установлено несколько версий баз данных, таким образом, вам, возможно, потребуется для корректной работы использовать, например, "db3_load". Преимущественно это наблюдается на некоторых системах Debian. Проблема заключается в том, что формат базы данных с логинами, которые будет обрабатывать "pam_userdb", отличается от других форматов баз данных, т.н. "pam_userdb" чаще всего работает с db3, в то время как в вашей системе, возможно, установлен db4.


Внимание! Для работы с базой данных Беркли вам потребуется набор утилит для управления базами данных в формате Беркли. В операционной системе Debian GNU/Linux вам потребуется пакет, содержащий набор этих утилит. В репозитории содержатся пакеты, содержащие три актуальные версии набора утилит соответственно:

$  aptitude search db | grep Berkeley
p   db4.6-doc                       - документация по базе данных Berkeley v4.6 
p   db4.6-util                      - утилиты базы данных Berkeley v4.6         
p   db4.7-doc                       - документация по базе данных Berkeley v4.7 
p   db4.7-util                      - Berkeley v4.7 Database Utilities          
p   db4.8-doc                       - Berkeley v4.8 Database Documentation [html
p   db4.8-util                      - Berkeley v4.8 Database Utilities          
  ...

Примечание: Как упоминалось выше, обратите внимание, что среди зависимостей пакета libpam-modules, присутствуют библиотеки СУБД Berkeley v4.8 (libdb4.8). Иначе говоря, vsftpd для авторизации через PAM использует базу данных в формате СУБД Berkeley v4.8.

Примечание: Обратите внимание на содержимое главы 5.1.3 в информации о выпуске Debian GNU/Linux 6.0 (squeeze), ниже приводится перевод:

Some Berkeley Database version 7 files created with libdb3 cannot be read by newer libdb versions (see bug #521860). As a workaround, the files can be recreated with db4.8_load, from the db4.8-util package.

Некоторые файлы Базы данных Беркли версии 7, созданные через libdb3, не могут быть прочитанны новыми версиями libdb (смотрите баг #521860). Как обходное решение проблемы, файлы потребуется пересоздать заново при помощи утилиты "db4.8_load", из пакета "db4.8-util".

Как видно из описания пакета db4.8-util, предоставляющего последнюю версию набора утилит для управления базами данных Беркли, он содержит необходимую нам утилиту, которая загружает (и создаёт) базу данных Беркли:

$ aptitude show db4.8-util
  ...
 * db4.8_load: loads (and creates) a database from standard input.
  ...

тем не менее, после установки пакета:

# aptitude install db4.8-util

вы не сможете использовать команду "dl_load", согласно официальному руководству от разработчика vsftpd:

# db_load
db_load: команда не найдена

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

$ aptitude show db4.8-util
  ...
 * db4.8_load: loads (and creates) a database from standard input.
  ...

в описании пакета, вместо команды "db_load", используется команда "db4.8_load".

Иначе говоря, в название утилиты включается её версия и общий универсальный вариант для использования утилиты "db_load" во всех версиях набора утилит будет выглядить так - "db<version>_load", то есть:

# db4.8_load
usage: db4.8_load [-nTV] [-c name=value] [-f file]
        [-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db4.8_load -r lsn | fileid [-h home] [-P password] db_file

перевод руководства страниц man для утилиты db4.8_load(1) доступен здесь:

# man db4.8_load

следуя руководству db4.8_load(1), вместо использования команды, приведённой в официальном руководстве vsftpd:

# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db

рабочий файл базы данных создаётся командой (от пользователя root):

# db4.8_load -T -t hash -f virtual-users.txt /etc/virtual-users.db


Эта команда создаст файл "/etc/vsftpd_login.db". Не забудьте установить права на файл с базой данных Беркли:

# chmod 0600 /etc/vsftpd_login.db

За дополнительной информацией по сопровождению вашей базы данных с логинами на vsftpd обращайтесь к документации по "Базам данных Беркли", более подробную информацию смотрите на wikipedia.org

Шаг 2) Создание файла PAM, который использует новую базу данных


В главе описывается создание файла PAM, который будет использовать вашу новую базу данных с логинами на vsftpd.

Пример приводится в файле "vsftpd.pam". Файл содержит две строчки (от переводчика: других строк не надо):

  auth       required    /lib/security/pam_userdb.so     db=/etc/vsftpd_login
  account    required    /lib/security/pam_userdb.so     db=/etc/vsftpd_login


Каждая строчка означает, что для удачной аутентификации пользователь должен пройти через указанный модуль. Формат записи файла PAM:

  Тип-Модуля    Флаг-Контроля    Путь-К-Модулю     Параметры-Модуля

Тип-Модуля должен быть одним из следующих типов модулей:

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

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

Примечание: Так как в задуманном авторами vsftpd содержимом этой главы используется модуль "pam_userdb.so", причём в обоих случаях (в двух строчках), то будет нелишним просмотреть руководство по использованию модуля. Как уже упоминалось выше, перевод руководства страницы man для библиотеки pam_userdb(8) доступен ?здесь


Содержимое файла сообщает PAM о том, что требуется аутентифицировать пользователей, используя нашу новую базу данных. Скопируем этот файл PAM в каталог PAM - обычно "/etc/pam.d/":

cp vsftpd.pam /etc/pam.d/ftp

(Примечание - если вы указываете в значение "pam_service_name" вместо "ftp", например, "vsftpd", то вам потребуется скопировать файл PAM в "/etc/pam.d/vsftpd").

Шаг 3) Установка расположения файлов для виртуальных пользователей


useradd -d /home/ftpsite virtual
ls -ld /home/ftpsite

(возвратит):

drwx------    3 virtual  virtual      4096 Jul 30 00:39 /home/ftpsite

Мы создали пользователя с именем "virtual", с домашним каталогом "/home/ftpsite/".

Добавим содержимое в эту область для закачек с vsftpd:

# cp /etc/hosts /home/ftpsite
# chown virtual.virtual /home/ftpsite/hosts

Шаг 4) Создадим файл настроек "vsftpd.conf"


Смотрите пример, из каталога с этим описанием. Рассмотрим его, строчку за строчкой:

anonymous_enable=NO
local_enable=YES

Для безопасности отключаем анонимный FTP, и включаем неанонимный FTP (это то, что используют виртуальные пользователи):

write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

Эти строчки гарантируют, что абсолютно любые команды на запись не разрешаются, в целях безопасности.

chroot_local_user=YES

Строчка выше гарантирует, что виртуальный пользователь ограничен областью виртуального-FTP, "/home/ftpsite/".

guest_enable=YES
guest_username=virtual

The guest_enable is very important - it activates virtual users! And guest_username says that all virtual users are mapped to the real user "virtual" that we set up above. This will also determine where on the filesystem the virtual users end up - the home directory of the user "virtual", /home/ftpsite.

Параметр "guest_enable" очень важен, так как он активирует виртуальных пользователей! Параметр "guest_username" говорит о том, что все виртуальные пользователи относятся к настоящему пользователю "virtual", которого мы создали выше. Также это задаёт где в файловой системе заканчивается виртуальные пользователи - в корневом каталоге пользователя "virtual", "/home/ftpsite".

listen=YES
listen_port=10021

Первая строчка переводит vsftpd в standalone (автономный) режим - то есть не запущенный из inetd. Это означает, что вам для запуска программы vsftpd потребуется только запустить исполняемый файл "vsftpd", и программа vsftpd запустится. Вторая строчка заставляет vsftpd слушать FTP-запросы на нестандартном порту 10021 (обычно FTP-порт - 21).

pasv_min_port=30000
pasv_max_port=30999

Эти строчки устанавливает диапазон портов, из которого может случайно выбираться порт для входящих пассивных FTP-запросов от пользователей - очень полезно, если вы настраиваете firewall.

Копируем файл для примера "vsftpd.conf" в "/etc/":

cp vsftpd.conf /etc/

Шаг 5) Запуск vsftpd


Перейдите в каталог, в котором находится бинарник vsftpd, и запустите vsftpd:

./vsftpd

Программа vsftpd, не уйдёт в фон. Если всё прошло хорошо, то vsftpd не будет выдавать сообщений и тихо будет работать. В обратном случае, если что-то пошло не так, то вы, скорее всего, увидите сообщения об ошибке.

Шаг 6) Тест


Дополнительно запустите ещё один сеанс оболочки shell (создав новую вкладку в вашем окне менеджера терминала, или нажав "ALT+F2" из консоли; или положите vsftpd в фон нажатием клавиш CTRL+Z, вывести программу vsftpd из фона обратно можно командой в терминале - "bg"). Вот пример сеанса FTP:

ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>

Комментарии:

Ссылки