Рассмотрим как настроить 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-сервер используя логин и пароль виртуального пользователя.