Содержание статьи:
В этой статье разберем как в 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
[note]Информация: если необходимо изменить базу данных пользователей, то нужно удалять текущую и создавать новую. Поэтому рекомендую не удалять файл со списком пользователей, а использовать его для пересоздания базы пользователей.[/note]
Создаем файл политики 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
[tip]Важно: указывать название файла базы данных в политике нужно без указания его расширения .db[/tip]
База данных готова для работы с 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
[note]Информация: Для закрытия доступа пользователю можно просто удалить его текущий симлинк, а для смены рабочей папки на другую удаляем текущий симлинк и создаем новый уже на другую папку.[/note]
Выставим права на папку к которой указали симлинк:
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
[warning]Важно: хочу напомнить что за основу конфигурационного файла /etc/vsftpd.conf взят конфиг из этой статьи. Поэтому все выше представленное параметры составляют лишь те опции в которые необходимо настроить в рамках текущей задачи.[/warning]
Сохраняем конфигурационный файл и перезапускаем vsftpd:
sudo service vsftpd restart
Проверяем работу, пробуем зайти на FTP-сервер используя логин и пароль виртуального пользователя.
Понравилась или оказалась полезной статья, поблагодари автора
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Оставить ответ