Установка Proftpd с хранением пользователей в MySQL и не только. Печать

В любой мало-мальской организации, в которой есть локальная сеть имеется сервер хранения файлов, такая файлопомойка, основная задача которой иметь побольше места. Реализовывается это по разному, некоторые просто расшаривают папку в сети, некоторые делают доступ по FTP. Как дать общий доступ к папке, думаю расказывать не стоит, а вот об ftp можно написать, кому-то может пригодится, да и я если забуду, будет куда заглянуть

Устанавливаем proftpd, при установке отмечаем что нужно, и незабываем про поддержку MySQL:

  1. cd /usr/ports/proftpd
  2. make install clean
  3.  

Правим конфиг proftpd.conf

ee /usr/local/etc/proftpd.conf

Примерно так:

  1. ServerName "FTP-server"
  2. ServerType standalone
  3. DefaultServer on
  4. ServerAdmin admin@ftpserver.ru
  5. Port 21
  6. Umask 022
  7. MaxInstances 30
  8. User nobody
  9. Group nogroup
  10. TransferLog /usr/home/log/proftpd-tranfer.log
  11. SystemLog /usr/home/log/proftpd-error.log
  12. CreateHome on
  13. LoadModule mod_sql.c
  14. LoadModule mod_sql_mysql.c
  15. SQLBackend mysql
  16. SQLAuthTypes Plaintext
  17. SQLAuthenticate users
  18. SQLConnectInfo proftpd_bd@localhost:3306 proftpd_user proftpd_password
  19. SQLUserInfo `users_table` `username` `password` `uid` `gid` \
  20. `homedir` `shell`
  21. RequireValidShell off
  22. SQLLogFile /usr/home/log/proftpd.log
  23. SQLLog PASS counter_login
  24. SQLNamedQuery counter_login UPDATE "`last_login`=UNIX_TIMESTAMP(), \
  25. `login_count`=`login_count`+1 WHERE \
  26. `username`='%u'" `users_table`
  27. SQLLog ERR_PASS counter_err
  28. SQLNamedQuery counter_err UPDATE "`last_err_login`=UNIX_TIMESTAMP(), \
  29. `err_login_count`=`err_login_count`+1 WHERE \
  30. `username`='%U'" `users_table`
  31. SQLLog RETR,STOR log_story_transfer
  32. SQLNamedQuery log_story_transfer INSERT "'',\
  33. UNIX_TIMESTAMP(),'%u',\
  34. '%f', '%b', '%h', \
  35. '%a', '%m', '%T'" \
  36. `xfer_table`
  37. SQLLOG ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO\
  38. log_err_modify
  39. SQLNamedQuery log_err_modify INSERT "'',\
  40. UNIX_TIMESTAMP(),\
  41. '%u', '%f', '%h', \
  42. '%a', '%m'" `xfer_errors`
  43. UseReverseDNS off
  44. IdentLookups off
  45. DefaultRoot ~
  46. <directory> AllowOverwrite on <limit write=""> AllowAll </limit> \ удалить при копировании <limit read=""> AllowAll </limit> </directory>
  47. <anonymous usr="" home="" ftp=""> User ftp Group ftp UserAlias \удалить при копировании anonymous ftp MaxClients 10 "Sorry, max %m users - try again later"\удалить при копировании <limit write=""> DenyAll </limit> </anonymous>

Далее создаем базу данных в mysql сервере, с нужными параметрами строки SQLConnectInfo в конфиге proftpd.conf. Создаем таблицы:

  1. --
  2. -- Table structure for table `users_table`
  3. --
  4.  
  5. DROP TABLE IF EXISTS `users_table`;
  6. CREATE TABLE `users_table` (
  7. `unic_id` int(11) NOT NULL AUTO_INCREMENT,
  8. `username` varchar(20) NOT NULL,
  9. `password` varchar(20) NOT NULL,
  10. `groupname` varchar(24) NOT NULL,
  11. `uid` int(11) NOT NULL,
  12. `gid` int(11) NOT NULL,
  13. `homedir` varchar(50) NOT NULL,
  14. `shell` varchar(20) NOT NULL,
  15. `last_login` int(15) NOT NULL,
  16. `login_count` int(15) NOT NULL,
  17. `last_err_login` int(15) NOT NULL,
  18. `err_login_count` int(15) NOT NULL,
  19. PRIMARY KEY (`unic_id`)
  20. ) ENGINE=MyISAM COMMENT='Таблица пользователей';
  21.  
  22. --
  23. -- Dumping data for table `users_table`
  24. --
  25.  
  26. INSERT INTO `users_table` VALUES (1,'ftpuser','123','ftp',
  27. 1001,1001,'/usr/home/ftpuser','/sbin/nologin',0,0,0,0);
  28. INSERT INTO `users_table` VALUES(2, 'admin','123', 'ftp',
  29. '1000', '1000', '/usr/users/admin', '/sbin/nologin',0,0,0,0)
  30.  
  31.  
  32.  
  33. --
  34. -- Table structure for table `xfer_errors`
  35. --
  36.  
  37. DROP TABLE IF EXISTS `xfer_errors`;
  38. CREATE TABLE `xfer_errors` (
  39. `unic_id` int(32) NOT NULL AUTO_INCREMENT,
  40. `timestamp` int(15) NOT NULL,
  41. `user_name` varchar(64) NOT NULL,
  42. `file_and_path` tinytext NOT NULL,
  43. `client_name` varchar(127) NOT NULL,
  44. `client_IP` varchar(15) NOT NULL,
  45. `client_command` varchar(5) NOT NULL,
  46. PRIMARY KEY (`unic_id`)
  47. ) ENGINE=MyISAM COMMENT='Таблица ошибок при работе';
  48.  
  49. --
  50. -- Dumping data for table `xfer_errors`
  51. --
  52.  
  53.  
  54. --
  55. -- Table structure for table `xfer_table`
  56. --
  57.  
  58. DROP TABLE IF EXISTS `xfer_table`;
  59. CREATE TABLE `xfer_table` (
  60. `unic_id` int(32) NOT NULL AUTO_INCREMENT,
  61. `timestamp` int(15) NOT NULL,
  62. `user_name` varchar(64) NOT NULL,
  63. `file_and_path` tinytext NOT NULL,
  64. `bytes` int(15) NOT NULL DEFAULT '0',
  65. `client_name` varchar(127) NOT NULL,
  66. `client_IP` varchar(15) NOT NULL,
  67. `client_command` varchar(5) NOT NULL,
  68. `send_time` varchar(9) NOT NULL DEFAULT '0',
  69. PRIMARY KEY (`unic_id`)
  70. ) ENGINE=MyISAM COMMENT='Таблица, чё приняли-передали';
  71.  
  72. --
  73. -- Dumping data for table `xfer_table`
  74. --
  75.  

Разрешаем в /etc/rc.conf:

proftpd_enable="YES"

и запускаем:

/usr/local/etc/rc.d/proftpd start

В общем-то всё. Если что-то не работает смотрим логи MySQL - правильные ли запросы идут к БД, идут ли они вообще, также смотрим /var/log/messages.

В крайнем случае запускаем proftpd с параметрами типа -q -d 10...

P.S. надо сразу отметить, что если создаётся учётка для пользователя, который есть в системе (в данном примере - `ftpuser`) и ему необходимо дать те же права, что у него есть - то имя пользователя и пароль должны совпадать с системными.

P.S.2 Кстати, если вместо Plaintext поставить Backend то можно в БД хранить пароли зашифрованные средствами самого MySQL (функция PASSWORD()).

P.S.3 Если пароли зашифрованы - то пользователь автоматом chroot`ится - ибо для проверки системного пароля он должен быть в БД не зашифрованным.

И еще: Скрипт просмотра логов ftp-сервера:

Скрипт для добавления фтп-пользователя в БД:

И еще2: Возможные проблемы с запуском...

"Unknown configration directiove 'SQLConnectInfo' in line...

решение нашлось, возможно необходимо установить:

  1. cd /usr/ports/databases/proftpd-mod_sql_mysql/
  2. make install clean

Иногда хранение пользователей в базе не требуется, к примеру если FTP используется одним - двумя людьми для узких задач. Ниже приведу простой конфиг для быстрого и простого запуска FTP сервера.

  1. ServerName "FTP forewer"
  2. ServerType standalone
  3. DefaultServer on
  4. ScoreboardFile /var/run/proftpd/proftpd.scoreboard
  5.  
  6. Port 21
  7. Umask 022
  8. MaxInstances 30
  9. CommandBufferSize 512
  10.  
  11. # Set the user and group under which the server will run.
  12. User nobody
  13. Group nogroup
  14. DefaultRoot ~
  15.  
  16. # Bar use of SITE CHMOD by default
  17. <limit site_chmod=""> AllowAll </limit>
  18.  
  19. # Timeouts
  20. TimeoutIdle 3600
  21. TimeoutLogin 3600
  22. TimeoutNoTransfer 3600
  23. TimeoutStalled 3600
  24. TimeoutSession 3600
  25.  
  26. # Name remote user
  27. IdentLookups off
  28.  
  29. # Reversy poisk IP
  30. UseReverseDns off
  31.  
  32. # MaxClients
  33. MaxClients 10 "Sorry, max %m users, try again later."
  34.  
  35. # Proverka comand
  36. AllowFilter ^[-A-Za-z0-9_.(),/]*$
  37.  
  38. # Peresilka server-server
  39. AllowForeignAddress off
  40.  
  41. # Razreshit .ftaccess
  42. AllowOverride on
  43.  
  44. # Razreshit perepisivat fail
  45. AllowOverwrite on

 

Обсудить и спросить можно на форуме.

Обновлено 13.10.2016 22:21
 

Добавить комментарий

Защитный код
Обновить