Использование виртуальных пользователей в VSFTPD используя Berkeley DB и MySQL базы данных

В этой статье разберем как в vsftpd настроить использование и авторизацию виртуальных пользователей, это повышает безопасность FTP-сервера, т. к. при авторизации не будут использоваться учетные записи пользователей указанные в системных файлах /etc/passwd и /etc/shadow, а в свою очередь виртуальные пользователи не имеют прав доступа, которые есть у локальных учётных записей.

Процедура авторизации пользователей в vsftpd осуществляется через PAM (Pluggable Authentication Modules | Подгружаемые Модули Аутентификации). Это дает возможность настраивать систему авторизации, что ниже мы и рассмотрим.

Рассмотрим организацию баз данных виртуальных пользователей через Berkeley DB и MySQL с последующей настройкой VSFTPD на работу с этими базами.

Все операции проделывались на Ubuntu server 14.04.5 x64, с установленным vsftpd по этой статье и основной конфигурационный файл использовался из статьи по ссылке.

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

Устанавливаем утилиту которая позволяет работать с базами данных Berkeley DB:

sudo apt-get install db5.3-util

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

sudo mkdir /etc/vsftpd

Создаем текстовый файл для указания списка пользователей:

sudo nano /etc/vsftpd/vsftpdusers.txt

Вносим пользователей в порядке (каждый пользователь и пароль на отдельной строчке):

jak1
111
jak2
222

Ограничиваем права на файл в целях безопасности:

chmod 0600 /etc/vsftpd/vsftpdusers.txt

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

sudo db5.3_load -T -t hash -f /etc/vsftpd/vsftpdusers.txt /etc/vsftpd/vsftpdusers.db

Посмотрим все ли нормально перенеслось в базу:

db5.3_dump -p /etc/vsftpd/vsftpdusers.db

Видим что все записи имеются в базе:

VERSION=3
format=print
type=hash
h_nelem=6
db_pagesize=4096
HEADER=END
jak1
111
jak2
222
DATA=END

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

Создаем файл политики PAM:

sudo nano /etc/pam.d/vsftpd.virtual

Заносим в него следующее:

auth required pam_userdb.so db=/etc/vsftpd/vsftpdusers
account required pam_userdb.so db=/etc/vsftpd/vsftpdusers
session required pam_loginuid.so

Важно: указывать название файла базы данных в политике нужно без указания его расширения .db

База данных готова для работы с VSFTPD.

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

Устанавливаем MySQL и Libpam:

sudo aptitude install vsftpd libpam-mysql mysql-server mysql-client

В процессе установки MySQL, необходимо будет задать пароль для root.

Входим в MySQL:

mysql -uroot -p

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

CREATE DATABASE vsftpd;
GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
USE vsftpd;
CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, user VARCHAR(50) NOT NULL, passwd VARCHAR(50) NOT NULL, UNIQUE (user));
QUIT;

Рассмотрим как управлять записями в базе данных, создание, редактирование, удаление пользователей.

Создание нового пользователя в базе данных:

mysql -uroot -p
USE vsftpd;
INSERT INTO users SET user='user1', passwd='passwd';
QUIT;

Смена пароля для пользователя:

mysql -uroot -p
USE vsftpd;
UPDATE users SET passwd='passwd' WHERE user='user1';
QUIT;

Удалить пользователя:

mysql -uroot -p
USE vsftpd;;
DELETE FROM users WHERE user='user1';
QUIT;

Посмотреть имеющихся пользователей в базе:

mysql -uroot -p
USE vsftpd;
SELECT * FROM users;
+----+-------+---------+
| id | user  | passwd  |
+----+-------+---------+
| 1  | user1 | 1234    |
| 2  | user2 | 5678    |
+----+-------+---------+

Создаем файл политики PAM:

sudo nano /etc/pam.d/vsftpd.virtual

Заносим в него следующее:

auth required pam_mysql.so user=vsftpd passwd=password host=localhost db=vsftpd table=users usercolumn=user passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vsftpd passwd=password host=localhost db=vsftpd table=users usercolumn=user passwdcolumn=passwd crypt=0

База данных готова для работы с VSFTPD.

Настройка VSFTPD для работы с базой данных Berkeley DB или MySQL

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

sudo mkdir /srv/vftp_users

Создаем симлинк (Символьную ссылку/Symbolic Link) на необходимую для доступа папку в папку /srv/vftp_users с именем пользователя:

sudo ln -s /srv/ftp /srv/vftp_users/jak1

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

Выставим права на папку к которой указали симлинк:

sudo chown -R ftp:nogroup /srv/ftp

Редактируем конфигурационный файл vsftpd:

sudo nano /etc/vsftpd.conf

И приводим следующие параметры конфигурации к виду:

# Разрешить локальные учетные записи. Если опция задействована, обычные пользовательские
# учетные записи в /etc/passwd могут использоваться для входа.
local_enable=YES
#
# Запирать локальных пользователей в их домашних каталогах.
chroot_local_user=YES
#
# Опция для автоматического создания домашней директории каждому виртуальному пользователю, основана на шаблоне.
user_sub_token=$USER
#
# Перенаправление подключившихся пользователей вместо домашнего каталога, в иной каталог.
local_root=/srv/vftp_users/$USER
#
# Виртуальные пользователи пользуются такими же привилегиями, что и локальные.
virtual_use_local_privs=YES
#
# Если опция установлена, все не анонимные логины классифицируются как "guest" логины.
guest_enable=YES
#
# Задается имя пользователя гостевого логина.
guest_username=ftp
#
# Разрешить пользователям загружать файлы на сервер.
write_enable=YES
#
# Если опция установлена, вся пользовательская и групповая информация в списке директорий, выводится как "ftp".
hide_ids=YES
#
# Строка содержит имя сервиса PAM, который будет использоваться vsftp.
pam_service_name=vsftpd.virtual

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

Сохраняем конфигурационный файл и перезапускаем vsftpd:

sudo service vsftpd restart

Проверяем работу, пробуем зайти на FTP-сервер используя логин и пароль виртуального пользователя.

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Оставить ответ

17 − 10 =