Блог ИТ склеротика. vsftpd и виртуальные пользователи

Страницы

Расширенный поиск в статьях блога

13 марта 2012 г.

vsftpd и виртуальные пользователи

В «стандартном» варианте vsftpd настроен таким образом, что поддерживает аутентификацию только локальных в пределах системы пользователей и/или анонимных. Принимая во внимание то, что в качестве механизма аутентификации в vsftpd используется PAM, мы вольны настраивать схему аутентификации как нам будет угодно. Этим сегодня и займёмся. В этой статье я расскажу о том, как в vsftpd можно настроить аутентификацию виртуальных пользователей, т. е. пользователей, учётные записи которых отсутствуют в системных /etc/passwd и /etc/shadow. Данный способ организации доступа к vsftpd естественно более безопасен, поскольку виртуальные пользователи не имеют прав доступа, которые есть у локальных учётных записей. При написании статьи использовались Debian 5 Lenny, Berkeley DB 4.6 и Linux PAM 2.6.26.

Установка необходимого ПО

Поскольку в процессе настройки понадобится создать базу данных Berkeley DB, необходимо установить набор инструментов, который позволит нам это сделать:
# apt-get install db4.6-util

Всё остальное уже должно присутствовать в вашей системе по умолчанию.

Создание базы данных виртуальных пользователей


Для того, чтобы создать Berkeley DB базу данных виртуальных пользователей, сперва необходимо подготовить список пользователей и паролей в текстовом файле. Формат файла очень прост. Каждая запись базы данных состоит из пары «ключ, значение», где ключом является имя учётной записи виртуального пользователя, а значением — его пароль. Каждая пара разбита на две строки: первая строка — ключ (имя пользователя), вторая — значение (пароль пользователя). Для примера создадим следующий файл в/home/ashep/tmp/vsftpdusers:
user1
password1
user2
password2

Таким образом мы подготовили текстовый файл для создания БД из двух пользователейuser1 и user2 с паролями password1 и password2 соответственно. Теперь из созданного файла можно создать базу данных Berkeley DB, например, в файле /etc/vsftpd/users.db:
# mkdir /etc/vsftpd
# db4.6_load -T -t hash -f /home/ashep/tmp/vsftpdusers /etc/vsftpd/users.db
# chmod 0600 /etc/vsftpd/users.db
$ rm /home/ashep/tmp/vsftpdusers

Настройка vsftpd


Для того, чтобы ваш vsftpd смог поддерживать виртуальных пользователей, в файле конфигурации /etc/vsftpd.conf необходимо сделать следующие изменения:


# Разрешение подключаться локальным и виртуальным пользователям
local_enable=YES
 
# Путь к домашним каталогам виртуальных пользователей
user_sub_token=$USER
local_root=/home/vsftpd/$USER
 
# Не даём вылазить за пределы своего домашнего каталога пользователям
chroot_local_user=YES
 
# Скрываем реальные ID пользователей от посторонних глаз
hide_ids=YES
 
# Ремаппинг неанонимных пользователей "гостевой" учётной записи
guest_enable=YES
 
# Имя "гостевой" учётной записи
guest_username=ftp
 
# Виртуальные пользователи пользуются такими же привилегиями, что и локальные
virtual_use_local_privs=YES
 
# Глобальное разрешение операций записи
write_enable=YES
 
# Имя службы PAM (должно совпадать с именем соответствующего файла в /etc/pam.d)
pam_service_name=vsftpd.virtual

Создание службы PAM


Теперь, чтобы PAM мог корректно аутентифицировать виртуальных пользователей vsftpd, необходимо создать соответствующую службу. В каталоге /etc/pam.d создайте файл с именем, указанным вами в параметре pam_service_name файла /etc/vsftpd.conf. В моём примере файл PAM-службы будет располагаться /etc/pam.d/vsftpd.virtual. Добавьте в файл следующее содержимое (обратите внимание на отсутствие расширения '.db' при указании имени файла БД!):
auth       required     pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users
session required pam_loginuid.so

Создание домашних каталогов виртуальных пользователей


Прежде чем виртуальные пользователи смогут подключиться к серверу, для них должны быть созданы соответствующие домашние каталоги, путь к которым определён значением параметра local_root конфигурационного файла vsftpd. После этого, необходимо сменить владельца созданных каталогов на пользователя, чья учётная запись фигурирует в параметре guest_username конфигурационного файла vsftpd.
# mkdir /home/vsftpd
# mkdir -p /home/vsftpd/{user1,user2}
# chown -R ftp:nogroup /home/vsftpd/

Перезапуск сервера


Теперь, когда все настройки завершены, необходимо перезапустить vsftpd, чтобы изменения вступили в силу.
# /etc/init.d/vsftpd restart

Проверка подключения


Ну, здесь уже всё просто:
$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.0.7)
Name (localhost:ashep): user1
331 Please specify the password.
Password: password1
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

По материалам cyberciti.biz





.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free