Настройка vsftpd с хранением учеток в MySQL
Для «производственных» нужд стало необходимо заливать на сайты по FTP файлы.
В качестве FTP сервера было решено поставить vsftpd, а хранить учетные записи в mysql для удобства добавления учеток.
В данном примере имя логина равно названию папки где хранится ваш сайт, папка и т.д.
Установка:
apt-get install vsftpd libpam-mysql
Если mysql не установлен его необходимо поставить (apt-get install mysql-server).
Создаем базу и учетную запись в mysql для vsftpd:
mysql -p вводим пароль root mysql сервера
CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'пароль_для_vsftpd';
Выбираем базу и создаем таблицу:
USE vsftpd;
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;
\q
Если длина логина в 30 символов вас не устраивает можете поменять этот параметр.
Создаем в системе пользователя vsftpd и делаем ему домашнуюю директорию /var/www:
useradd --home /var/www --gid nogroup -m --shell /bin/false vsftpd
Делаем резервную копию файла настроек:
cp /etc/vsftpd.conf /etc/vsftpd.conf_back
Очищаем файл:
echo -n > /etc/vsftpd.conf
Редактируем:
mcedit /etc/vsftpd.conf
Вставляем следующее:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
guest_username=vsftpd
local_root=/var/www/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
Если необходимо «перевесить» порт ftp добавляем:
listen_port=порт
Создаем папку в которую можно складывать персональные настройки для каждой учетной записи:
mkdir /etc/vsftpd_user_conf
Редактируем PAM модуль который отвечает за авторизацию пользователей через mysql, предварительно сделав backup :
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back
echo -n > /etc/pam.d/vsftpd
mcedit /etc/pam.d/vsftpd
Вставляем:
auth required pam_mysql.so user=vsftpd passwd=пароль_для_vsftpd host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=пароль_для_vsftpd host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
Перезапускаем сервер:
/etc/init.d/vsftpd restart
Сервер готов к работе достаточно создать виртуальных пользователей и можно работать.
Для добавления пользователя используем команды:
mysql -p вводим пароль root mysql сервера
USE vsftpd;
INSERT INTO accounts (username, pass) VALUES('логин', PASSWORD('пароль'));
\q
Логин будет равен папке которая лежит в папке /var/www т.е. если вы создали учетку test.com то папка в /var/www будет тоже test.com.
Заводить учетки можно не только таким образом, можно используя любую администрировалку mysql, либо через php скрипт и т.д.
Создаем эту самую папку в /var/www и меняем права:
mkdir /var/www/логин
chown vsftpd:nogroup /var/www/логин
P.S. Перезапускать FTP сервер после добавления учеток и создания папки не нужно.
А можно иметь виртуальных пользователей храня их в БД mysql
но самому назначать какие папки ему давать под доступ ну и права?
Нужно поправить путь до pam_mysql.so.
Например:
required /lib/security/pam_mysql.so
Можем поискать:
find / -name «pam_mysql.so»
и вписываем путь в соответствии.