четверг, 7 августа 2014 г.

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

За основу взяты статьи:

Перед нами стоит задача предоставить множеству пользователей доступ по FTP, при этом не создавая для этого реальных пользователей. Эти пользователи не находятся в файлах /etc/passwd и /etc/shadow. Ко всему этому, все пользователи будут работать на сервере от одного реального пользователя, к примеру www-data или ftp. Управление доступом к папкам будут регулироваться на уровне установленных прав для директорий. Ни один из пользователей не уйдет дальше своей папки.
Не пугайтесь большого количества действий - все довольно просто. Приступим.

Примечание: в этой статье используется FTP сервер vsftpd.

Если у вас не установлен FTP сервер, установите его по этой инструкции:

1. База данных пользователей


Для создания базы виртуальных пользователей, нужна будет Berkeley DB. Для начала нужно узнать доступную версию. Для этого вводим в командной строке:
sudo apt-cache search db | grep Berkeley

И ищем строчку, похожую на:
db5.3-util - Berkeley v5.3 Database Utilities

Выбираем самую последнюю версию и устанавливаем:
sudo apt-get install db5.3-util

2. Список пользователей


Пользователи являются виртуальными, но их использование будет производиться от лица реального пользователя. Создадим его и папку для виртуальных пользователей:
sudo mkdir /home/ftp
sudo useradd -d /home/ftp ftpadmin
sudo passwd ftpadmin
sudo chown ftpadmin /home/ftp

Для того, чтобы создать Berkeley DB базу данных виртуальных пользователей, сперва необходимо подготовить список пользователей и паролей в текстовом файле. Формат файла очень прост. Каждая запись базы данных состоит из пары «ключ, значение», где ключом является имя учётной записи виртуального пользователя, а значением — его пароль. Каждая пара разбита на две строки: первая строка — ключ (имя пользователя), вторая — значение (пароль пользователя). Для примера создадим следующий файл vsftpdusers в директории /etc/vsftpd/:
sudo mkdir /etc/vsftpd
sudo touch /etc/vsftpd/vsftpdusers
#Читать и изменять файл сможет только root
sudo chmod 0600 /etc/vsftpd/vsftpdusers

Запишем в него информацию о пользователях. sudo vim vsftpdusers:
user1
password1
user2
password2

Для каждого пользователя создаем папки в нужной директории. К примеру, у меня это /home/ftp:
sudo mkdir /home/ftp/user1
sudo mkdir /home/ftp/user2

Указываем владельца папок, от которого будет осуществляться работа пользователей на сервере:
sudo chown ftpadmin:ftpadmin /home/ftp/user1
sudo chown ftpadmin:ftpadmin /home/ftp/user2

Остается создать базу пользователей из созданного выше текстового файла:
#Создаем DB
sudo db5.3_load -T -t hash -f /etc/vsftpd/vsftpdusers /etc/vsftpd/users.db
#Устанавливаем права ради безопасности. Читать и изменять файл сможет только root
sudo chmod 0600 /etc/vsftpd/users.db


3. Конфигурация VSFTPD


Редактируем файл настроек vsftpd:
sudo vim /etc/vsftpd.conf
Это минимальный набор параметров, необходимый для работы с нашими требованиями:
# Активирум сервис. Если используется xinetd, то выставить NO
listen=YES
# Отключаем вход от анонимного пользователя
anonymous_enable=NO
# Разрешение подключаться локальным и виртуальным пользователям
local_enable=YES
# Работа с виртуальными пользователями
user_sub_token=$USER
# Путь к домашним каталогам виртуальных пользователей
local_root=/home/ftp/$USER
# Не даём вылазить за пределы своего домашнего каталога пользователям
chroot_local_user=YES
# Скрываем реальные ID пользователей работающих на сервере
hide_ids=YES
# Все виртуальные пользователи работают как гостевые
guest_enable=YES
# Настоящее имя пользователя, от которого работают гостевые
guest_username=ftpadmin
# Виртуальные пользователи пользуются такими же привилегиями, что и локальные
virtual_use_local_privs=YES
# Глобальное разрешение операций записи
write_enable=YES
allow_writeable_chroot=YES
# Разрешаем работать в пассивном режиме
pasv_enable=YES
pasv_max_port=65535
pasv_min_port=32768
# Имя службы PAM
pam_service_name=vsftpd.virtual

Создадим новую службу авторизации для vsftpd. В каталоге /etc/pam.d создаем файл с именем указанным в vsftpd.conf в пункте pam_service_name
sudo vim /etc/pam.d/vsftpd.virtual

Заполняем файл следующим содержимым, где указываем на созданную нами базу без её расширения:
auth        required    pam_userdb.so db=/etc/vsftpd/users
account     required    pam_userdb.so db=/etc/vsftpd/users
session     required    pam_loginuid.so
Все настройки завершены. Осталось перезапустить сервис:
sudo vsftpd restart
Для заметки:
Более подробно ознакомиться с параметрами файла vsftpd.conf можно на www.lissyara.su

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

Отправить комментарий