Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

В данной статье мы рассмотрим настройку популярного FTP-сервера vsftpd с авторизацией при помощи виртуальных пользователей, учетные записи которых хранятся в базе данных MySQL. Это вариант избавляет нас от создания новых пользователей в системе, что является не совсем правильным с точки зрения безопасности. Также большим плюсом является то, что директории пользователей находятся и изолированном пространстве, т. к. права на них выставляются минимальные.

Итак, для данного мероприятия нам понадобиться сам софт и к нему некоторые вспомогательные штуки.

 

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

 

По желанию можно сюда ещё припаять phpMyAdmin.

Создаем пароль для root в MySQL

 

mysqladmin -u root password yourrootsqlpassword

 

Далее логинимся в MySQL и создаём там новую базу.

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

 

mysql -u root -p

 

CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

 

Переходим внутрь базы и создаём таблицу:

 

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 ;

 

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

 

INSERT INTO accounts (username, pass) VALUES('имя_вашего_юзера', PASSWORD('пароль_вашего_юзера'));

quit;

 

С базой покончили. Теперь берёмся за сам vsftpd:

Создаём непривилегированного пользователя vsftpd с домашней директорией /home/vsftpd, в которой будут находиться директории пользователей.

 

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

 

Приводим конфиг к следующему виду:

 

gedit /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
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
uest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

 

 

Конфигурируем PAM для аутентификации в MySQL

 

nano /etc/pam.d/vsftpd

 

auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Создаём директорию для нашего пользователя, а также назначаем ей права:

 

mkdir /home/vsftpd/ваш_юзер

chown vsftpd:nogroup /home/vsftpd/ваш_юзер

 

В случае возникновения ошибки

 

500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.

 

Нужно удалить права записи в root-директорию командой

 

chmod a-w /home/vsftpd

 

И добавить в конфигурационный файл vsftpd.conf  строку

 

allow_writeable_chroot=YES

 

Перестартуем сервис vsftpd

 

/etc/init.d/vsftpd restart

 

Теперь разбираемся с файрволом. Поскольку FTP в своей работе использует не только 21 и 20 порт, а ещё кучу разных портов для этого, необходимо подгрузить из ядра модуль с названием ip_nat_ftp, который и отвечает за открытие нужных портов. Что и делаем:

 

modprobe ip_nat_ftp

 

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

 

nano /etc/modules

 

ip_nat_ftp

 

И на всякий случай в конфиг iptables. Где у вас находиться этот конфиг, вам же и виднее.

 

nano /etc/sysconfig/iptables

 

IPTABLES_MODULES="ip_nat_ftp"

 

Там пишем цепочки для работы FTP:

 

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 20 -j allowed

 

Перезапускаем iptables

 

/etc/init.d/iptables restart

 

Теперь пользователь имеет полную свободу действий в своей директории. Он может забирать или наоборот выкладывать файлы. Если есть необходимость разграничить права пользователей, то это можно делать с файле /etc/vsftpd_user_conf. Конфиг /etc/vsftpd.conf также имеет множество вариантов настройки. Более подробную информацию ищите в сети.

 

Написано по мотивам рассказов на howtoforge.com и личного опыта.