Секретные записки WEB-программиста




100mbru, bitrix, CentOS, cms, drupal, java, joomla, LAMP, linux, mysql, nicru, Open-Source, php, Red Hat, seo, Typo3, ubuntu, win, windows, авто, администрирование, алгоритмы, алкоголь, бизнес, битрикс, видео, военмех, выборы, германия, джино, домены, интересности, исследования, картинки, кино, компьютеры, ливия, магазин, маразм, мастерхост, обработка-изображений, пейнтбол, политика, политэкономия, прикольное-видео, программирование, путешествия, работа, религия, рунет, сайтостроение, сео, сми, технологии, украина, форум, хиханьки, холивары, хостинг

vsftpd + mysql + virtual users

28.10.2016

Суть механизма: vsftpd общается с pam, а pam общается с mysql.

  # cd /usr/ports/ftp/vsftpd/  
# make install clean


Версия без поддержки SSL.
Поставили, далее модуль pam_mysql.so

  # cd /usr/ports/security/pam-mysql  
# make install clean

После установки делает линк

  #   ln  -sf  / usr / local / lib / pam_mysql.so  / usr / lib / pam_mysql.so

Ставим mysql.

  # /usr/ports/databases/mysql41-server  # make install clean 

В /etc/rc.conf добавим:

  mysql_enable = "YES" 

Запускаем mysql

  #   / usr / local / etc / rc.d / mysql-server start

Создадим базу где будут храниться логины и пароли от пользователей. Владелец базы vsftpd, пароль ftpdpass

  # 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 ;
quit;

Далее командой

  #  adduser

создаем пользователя с похожими данными /etc/passwd

 vsftpd: * : 1003 : 1003 :User  & amp;: / home / vsftpd: / usr / sbin / nologin

Теперь конфиг фтп сервера:

  / usr / local / etc / vsftpd.conf  
anonymous_enable
=NO
local_enable
=YES
write_enable
=YES
local_umask
=022
anon_upload_enable
=NO
anon_mkdir_write_enable
=NO
dirmessage_enable
=YES
xferlog_enable
=YES
connect_from_port_20
=YES
xferlog_file
= / var / log / vsftpd.log
nopriv_user
=vsftpd
chroot_local_user
=YES
secure_chroot_dir
= / usr / local / share / vsftpd / empty
listen
=YES
pasv_min_port
= 50000
pasv_max_port
= 50100
pam_service_name
=vsftpd
guest_enable
=YES
guest_username
=vsftpd local_root = / home / vsftpd /
$USER
user_sub_token = $USER
virtual_use_local_privs
=YES
user_config_dir
= / usr / local / etc / vsftpd_user_conf

Далее создадим директорию

  #   mkdir  / usr / local / etc / vsftpd_user_conf

Создаем конфигурационный файл vsftpd, что бы pam функционировал с фпт сервером

  #  ee  / 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

В файле /etc/pam.d/vsftpd убедитесь, что бы было только 2 строки(первая начинается с auth required, вторая account required), без переносов.

Добавим тестового пользователя с логином testuser и паролем secret:

 USE vsftpd;
INSERT INTO accounts ( username, pass ) VALUES ( "testuser" , PASSWORD ( "secret" ) ) ;quit;

И еще немного прав пользователям на каталоги:

  mkdir  / home / vsftpd / testuser chown vsftpd:nogroup  / home / vsftpd / testuser

Запускаем:

  #  / usr / local / etc / rc.d / vsftpd.sh start

P.S. в качестве фаервола я всегда использую pf, добавляем в /etc/pf.conf правила для фтп сервера:

 pass  in on  $ext_if inet proto tcp from any port  1024 : 65535 to ваш.ip.адрес port  21 flags S / SA keep state
pass in on $ext_if inet proto tcp from any port 1024 : 65535 to ваш.ip.адрес port 50000 : 50100 flags S / SA keep state

Строки
pasv_min_port=50000
pasv_max_port=50100
в /usr/local/etc/vsftpd.conf означают, что открываются порты с 50000 до 50100 для пассивного режима работы фтп сервера и максимально может быть только 100 одновременных сессий.

pss: пользователей можно заводить и при помощи обычного phpmyadmin

Для использования FTPS необходимо установить vsftpd с поддержкой SSL и в конфигурации добавить

  session_support =YES 
ssl_enable
=YES
ssl_sslv2
=YES
ssl_sslv3
=YES
ssl_tlsv1
=YES
allow_anon_ssl
=YES
force_local_data_ssl
=NO
force_local_logins_ssl
=NO
rsa_cert_file
= / usr / local / etc / vsftpd.pem
rsa_private_key_file
= / usr / local / etc / vsftpd.key

Для создания сертификатов выполнить:

 openssl genrsa  -des3  -out vsftpd.key  2048 
openssl rsa -in vsftpd.key -out vsftpd.pem
openssl req -new -key vsftpd.key -out vsftpd.csr
openssl x509 -req -days 366 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
rm
vsftpd.pem
mv
vsftpd.crt vsftpd.pem