1.Установка Proftpd с поддержкой MySQL
2.Редактирование конфига proftpd.conf (указан в конце статьи)
3.Создание группы и пользователя, которым будут принадлежат все папки и файлы виртуальных FTP пользователей
1 |
# addgroup –g 1100 |
1 |
# useradd –g 1100 –u 1100 –c ‘Tilllate project’ –d /home/mysystemuser –s /bin/bash |
4. Создание пользователя, указанного в proftpd.conf в строке
1 |
SQLConnectInfo proftpd@localhost:3306 proftpd myftpuser |
1 2 3 |
proftpd –имя базы proftpd –имя пользователя myftpuser – пароль пользователя |
С настройками proftpd закончено и теперь стоит приступить к созданию базы данных в MySQL и внесения в нее необходимых данных. Для начала создадим пользователя, который будет владельцем данной базы данных, пусть это будет proftpd:
1 |
mysql -u root -p |
1 |
Enter password: |
1 |
mysql> grant select,insert,update,delete,create,drop on proftpd.* to proftpd@localhost identified by 'myftpuser'; |
1 |
mysql> exit; |
Теперь необходимо зайти под только что созданным пользователем и создать саму базу данных:
1 |
mysql -u proftpd -p |
1 |
Enter password: |
1 |
mysql> create database proftpd; |
далее создадим таблицу users
1 |
mysql> use proftpd; |
1 2 3 4 5 6 7 |
mysql> CREATE TABLE users userid VARCHAR(30) NOT NULL UNIQUE, passwd VARCHAR(80) NOT NULL, uid INTEGER, gid INTEGER, homedir VARCHAR(255), shell VARCHAR(255); |
Перед тем, как проверять результаты работы, комментарии к таблице users:
- userid: имя виртуального пользователя
- passwd: пароль пользователя
- uid: uid пользователя, которому принадлежат файлы
- gid: gid пользователя, которому принадлежат файлы
- homedir: chroot директория виртуального пользователя
- shell: shell, выдаваемый пользователю (рекомендуется использовать /sbin/nologin)
Добавление нового пользователя в таблицу:
1 |
mysql> insert into users values('ftpuservirt','123','1100','1100','/home/ftpuservirt','/sbin/nologin'; |
Создаем домашний каталог FTP-пользователя и выставляем на него владельца и группу уже существующую в системе(для этого мы создавали пользователя mysystemuser ранее)
1 |
# mkdir /home/ftpuservirt |
1 |
# chown –R mysystemuser:mysystemuser /home/ftpuservirt |
Также следует создать лог-файл Proftpd:
1 |
touch /var/log/proftpd.log |
Проверяем синтаксис proftpd.conf на наличие ошибок
1 |
# proftpd -t |
Запускаем сервер и смотрим логии в /var/log/proftpd.log
Примечание!!!
1 |
SQLAuthTypes PlainText |
Эта строка в proftpd.conf определяет хранение паролей в MySQL-базе в открытом(незашифрованном) виде
Для хранения паролей в зашифрованном виде(например,используя механизм crypt)
необходимо использовать строку
1 |
SQLAuthTypesvCrypt |
При этом ввод пароля при добавлении пользователя производить так
1 |
mysql> insert into users values('ftpuservirt', ENCRYPT('user_pass'),'1100','1100','/home/ftpuservirt','/sbin/nologin'; |
где user_pass – пароль пользователя в шифрованном виде
Конфигурационный файл Proftd имееет вид proftpd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
ServerName "ProFTPD My Server" ServerType standalone DefaultServer on RequireValidShell off AuthPAM off AuthPAMConfig ftp UseReverseDNS off UseIPv6 off IdentLookups off ServerIdent off SQLAuthTypes PlainText SQLConnectInfo proftpd@localhost:3306 proftpd myftpuser SQLUserInfo users userid passwd uid gid homedir shell SQLGroupInfo groups groupname gid members SQLAuthenticate users #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" #TransferLog /var/log/proftpd/xferlog #SystemLog /var/log/proftpd/proftpd.log #ExtendedLog /var/log/proftpd/auth.log AUTH auth SyslogLevel notice Port 21 Umask 0002 TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 MaxInstances 20 MaxClientsPerHost 5 MaxClientsPerUser 5 MaxHostsPerUser 5 MaxLoginAttempts 3 User ftp Group ftp # Every FTP sessions is "jailed" into the user's home directory. DefaultRoot ~ # Generally files are overwritable. AllowOverwrite on # Disallow the use of the SITE CHMOD command. <Limit SITE_CHMOD> DenyAll </Limit> |