SCROLL
Среднее время на прочтение: 2 мин.

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

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

 

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

 

# Все ниже действия производились на Debian 8 Jessie.

 

Устанавливаем необходимые пакеты:

apt-get install libpam-mysql mysql-server mysql-client -y

 

Входим в  mysql:

mysql -uroot -p

 

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

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;

 

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

USE vsftpd;
INSERT INTO users SET user='user1', passwd='passwd';
QUIT;

 

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

USE vsftpd;
UPDATE users SET passwd='passwd' WHERE user='user1';
QUIT;

 

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

USE vsftpd;
DELETE FROM users WHERE user='user1';
QUIT;

 

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

USE vsftpd;
SELECT * FROM users;
+----+-------+---------+
| id | user  | passwd  |
+----+-------+---------+
| 1  | user1 | 1234    |
+----+-------+---------+

 

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

cat << EOF > /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
EOF

 

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

mkdir /srv/vftp_users

 

Создаем симлинк на необходимую для доступа папку в папку /srv/vftp_users с именем пользователя, например для виртуального пользователя user1 доступ к /srv/ftp:

ln -s /srv/ftp /srv/vftp_users/user1

[stextbox id=’info’]ИНФОРМАЦИЯ. Для закрытия доступа пользователю можно просто удалить его текущий симлинк, а для смены рабочей папки на другую удаляем текущий симлинк и создаем новый уже на другую папку.[/stextbox]

 

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

chown -R ftp:nogroup /srv/ftp

 

В конфигурационный файл /etc/vsftpd.conf добавляем параметры:

local_enable=YES
chroot_local_user=YES
user_sub_token=$USER
local_root=/srv/vftp_users/$USER
virtual_use_local_privs=YES
guest_enable=YES
guest_username=ftp
write_enable=YES
hide_ids=YES
pam_service_name=vsftpd.virtual

 

Небольшое пояснение по некоторым пунктам настройки:

user_sub_token Опция для автоматического создания домашней директории каждому виртуальному пользователю, основана на шаблоне.
local_root Перенаправление подключившихся пользователей вместо домашнего каталога, в иной каталог.
virtual_use_local_privs Виртуальные пользователи пользуются такими же привилегиями, что и локальные.
guest_enable Если опция установлена, все не анонимные логины классифицируются как «guest» логины.
guest_username Задается имя пользователя гостевого логина.
write_enable Разрешить пользователям загружать файлы на сервер.
hide_ids Если опция установлена, вся пользовательская и групповая информация в списке директорий, выводится как «ftp».
pam_service_name Строка содержит имя сервиса PAM, который будет использоваться vsftp.

 

Перезапускаем службу vsftpd:

service vsftpd restart

 

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

Обсуждение

0 комментариев

Нет комментариев.