Цель следующей статьи — организация ftp доступа к серверу с хранением имен пользователей и паролей, домашних каталогов и т.д. в СУБД MySQL.
Для начала настройки proftpd.conf — главного конфигурационного файла нашего ftp-сервера — необходимо скачать и установить rpm пакеты proftpd-1.3.3c-1.el5.rf.x86_64.rpm proftpd-mysql-1.3.3c-1.el5.rf.x86_64.rpm, которые успешно можно найти при помощи любой удобной для Вас поисковой системы. Также подразумевается, что есть установленный и работающый сервер MySQL, для которого есть права супер-пользователя.
Пример конфигурации proftpd.conf с комментариями:
# cat /etc/proftpd.conf # This is the ProFTPD configuration file # $Id: proftpd.conf,v 1.1 2004/02/26 17:54:30 thias Exp $ ServerName "FTP server" ServerIdent on "FTP Server ready." ServerAdmin [email protected] ServerType standalone DefaultServer on AccessGrantMsg "User %u logged in." #DisplayConnect /etc/ftpissue #DisplayLogin /etc/ftpmotd #DisplayGoAway /etc/ftpgoaway DeferWelcome off # Do not perform ident nor DNS lookups (hangs when the port is filtered) IdentLookups off UseReverseDNS off # Port 21 is the standard FTP port. Port 21 # Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. Umask 022 # Default to show dot files in directory listings ListOptions "-a" # See Configuration.html for these (here are the default values) #MultilineRFC2228 off RootLogin off #LoginPasswordPrompt on MaxLoginAttempts 3 MaxClientsPerHost 1 #AllowForeignAddress off # For FXP # Allow to resume not only the downloads but the uploads too AllowRetrieveRestart on AllowStoreRestart on # To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd) MaxInstances 30 # To cause every FTP user to be "jailed" (chrooted) into their home # directory, uncomment this line. DefaultRoot ~ # Normally, we want files to be overwriteable. AllowOverwrite on # Под кем будет запускаться FTP демон User nobody Group nobody # Disable sendfile by default since it breaks displaying the download speeds in # ftptop and ftpwho UseSendfile no # This is where we want to put the pid file ScoreboardFile /var/run/proftpd.score #AllowGroup ftp #DenyALL LoadModule mod_sql.c LoadModule mod_sql_mysql.c LoadModule mod_quotatab.c LoadModule mod_quotatab_sql.c # настройки для авторизации через mysql. (пароли используются в открытом виде: PlainText) SQLConnectInfo proftpd@localhost:3306 proftpd ftpserver SQLAuthTypes PlainText SQLUserInfo users userid passwd uid gid homedir shell DefaultRoot ~ RequireValidShell off SQLGroupInfo groups groupname gid members SQLAuthenticate users groups # путь к лог-файлу и его формат отображения SQLLogFile /var/log/proftpd.log LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s"
Также следует создать файла
touch /var/log/proftpd.log
С настройками proftpd закончено и теперь стоит приступить к созданию базы данных в MySQL и внесения в нее необходимых данных. Для начала создадим пользователя, который будет владельцем данной базы данных, пусть это будет proftpd:
mysql -u root -p Enter password: mysql>grant select,insert,update,delete,create,drop ->on proftpd.* ->to proftpd@localhost ->identified by 'myftpserver'; Query OK, 0 rows affected (0.16 sec) mysql>exit;
Теперь необходимо зайти под только что созданным пользователем и создать саму базу данных:
mysql -u proftpd -p Enter password: mysql>create database proftpd; Далее создадим две табилци users и groups: mysql>use proftpd; Database changed mysql> CREATE TABLE users ( -> userid VARCHAR(30) NOT NULL UNIQUE, -> passwd VARCHAR(80) NOT NULL, -> uid INTEGER UNIQUE, -> gid INTEGER, -> homedir VARCHAR(255), -> shell VARCHAR(255) -> ); Query OK, 0 rows affected (0.03 sec) mysql> CREATE TABLE groups ( -> groupname VARCHAR(30) NOT NULL, -> gid INTEGER NOT NULL, -> members VARCHAR(255) -> ); Query OK, 0 rows affected (0.01 sec) mysql> mysql> use proftpd Database changed
Теперь добавим нового пользователя в таблицу:
mysql>insert into groups values('ftp','5001',''); mysql>insert into users values('test','testftp','5001','5001','/var/www/vhosts/example.com','/sbin/nologin' ); mysql>exit;
После внесения этих данных, необходимо создать каталог
/var/www/vhosts/example.com
и установить права вида
chown -R 5001:5001 /var/www/vhosts/example.com
Запуск ftp-сервера и установка запуска сервиса при загрузке системы производится по командам
service proftpd start chkconfig proftpd on
proftpd также можно установить после подключения EPEL