Proftpd学习笔记之应用
创始人
2024-07-22 15:30:57
0

 

ProFTPD 

图-ProFTPD

  今天我们讲proftp+mysql+quota的应用,我想大家最期待的就是这个了吧

  1.首先我们建立相应的用户和用户组

  groupadd -g 5500 ftpgroup

  adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

  2.操作数据库

  mysql mysql -uroot -ppassword

  create database ftpdb

  grant select, update on ftpdb.* to proftpd@localhost identified by 'password'

  use ftpdb

  CREATE TABLE `ftpgroup` (

  `groupname` varchar(16) NOT NULL default '',

  `gid` smallint(6) NOT NULL default '5500',

  `members` varchar(16) NOT NULL default '',

  KEY `groupname` (`groupname`)

  ) TYPE=MyISAM COMMENT='ProFTP group table';

  INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');

  CREATE TABLE `ftpquotalimits` (

  `name` varchar(30) default NULL,

  `quota_type` enum('user','group','class','all') NOT NULL default 'user',

  `per_session` enum('false','true') NOT NULL default 'false',

  `limit_type` enum('soft','hard') NOT NULL default 'soft',

  `bytes_in_avail` float NOT NULL default '0',

  `bytes_out_avail` float NOT NULL default '0',

  `bytes_xfer_avail` float NOT NULL default '0',

  `files_in_avail` int(10) unsigned NOT NULL default '0',

  `files_out_avail` int(10) unsigned NOT NULL default '0',

  `files_xfer_avail` int(10) unsigned NOT NULL default '0'

  ) TYPE=MyISAM;

  CREATE TABLE `ftpquotatallies` (

  `name` varchar(30) NOT NULL default '',

  `quota_type` enum('user','group','class','all') NOT NULL default 'user',

  `bytes_in_used` float NOT NULL default '0',

  `bytes_out_used` float NOT NULL default '0',

  `bytes_xfer_used` float NOT NULL default '0',

  `files_in_used` int(10) unsigned NOT NULL default '0',

  `files_out_used` int(10) unsigned NOT NULL default '0',

  `files_xfer_used` int(10) unsigned NOT NULL default '0'

  ) TYPE=MyISAM;

  CREATE TABLE `ftpuser` (

  `id` int(10) unsigned NOT NULL auto_increment,

  `userid` varchar(32) NOT NULL default '',

  `passwd` varchar(32) NOT NULL default '',

  `uid` smallint(6) NOT NULL default '5500',

  `gid` smallint(6) NOT NULL default '5500',

  `homedir` varchar(255) NOT NULL default '',

  `shell` varchar(16) NOT NULL default '/sbin/nologin',

  `count` int(11) NOT NULL default '0',

  `accessed` datetime NOT NULL default '0000-00-00 00:00:00',

  `modified` datetime NOT NULL default '0000-00-00 00:00:00',

  PRIMARY KEY (`id`)

  ) TYPE=MyISAM COMMENT='ProFTP user table' ;

  注意这里大家根据实际情况填写自己数据库的用户名和密码,如果大家对数据库操作不熟悉的话,不妨可以用phpmyadmin来操作。

  3.配置proftp文件

  ServerName "Frank's FTP Server" ServerType standalone DefaultServer on

  Port 21

  Umask 022

  MaxInstances 30

  MaxLoginAttempts 3

  User nobody

  Group nobody

  MaxHostsPerUser 1 "Sorry, you may not connect more than one time."

  MaxClientsPerUser 2 "Only one such user at a time."

  MaxClientsPerHost 3 "Sorry, you may not connect more than one time."

  RootLogin off

  RequireValidShell off

  TimeoutStalled 10

  MaxClients 10

  AllowForeignAddress on

  AllowStoreRestart on

  ServerIdent off

  DefaultRoot ~ ftpgroup

  SQLAuthTypes Backend Plaintext

  #Backend表示用户认证方式为MySQL数据库的认证方式

  #Plaintext表示明文认证方式,排在最前面的为最先使用的方式

  SQLAuthenticate users* groups*

  # databasename@host database_user user_password

  SQLConnectInfo ftpdb@localhost proftpd password

  SQLUserInfo ftpuser userid passwd uid gid homedir shell

  SQLGroupInfo ftpgroup groupname gid members

  SQLHomedirOnDemand on

  #如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录

  # Update count every time user logs in

  SQLLog PASS updatecount

  SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser

  # Update modified everytime user uploads or deletes a file

  SQLLog STOR,DELE modified

  SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

  QuotaEngine on

  QuotaDirectoryTally on

  QuotaDisplayUnits Mb

  QuotaShowQuotas on

  QuotaLog "/var/log/quota"

  SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avai

  l, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}'

  AND quota_type = '%{1}'"

  SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_i

  n_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

  SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used

  + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_

  out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquota

  tallies

  SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

  QuotaLimitTable sql:/get-quota-limit

  QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

  ok,就这么简单,重启一下proftp服务就已经能使用proftp+mysql+quota的功能

  我们可以在数据库ftpuser添加一个虚拟用户,

  INSERT INTO `ftpuser` VALUES (1, 'test', 'ftppasswd', 5500, 5500, '/home/test', '/sbin/nologin');

  大家可以在phpmyadmin里直接操作添加一个用户,相信不用我教大家怎么添加吧:)

  如果你想设置quota,只要在ftpquotalimits表里设置一下就行了,这个表里的各个参数分别代表:

  quotalimits表

  name: - 用户帐号

  quota type: - user, group, class, all (we use user)

  per_session: - true or false (we use true)

  limit_type: - 硬限制 or 软限制 (我们一般用硬限制)

  bytes_in_avail: - 允许上传的字节数

  bytes_out_avail: - 允许下载的字节数

  bytes_xfer_avail: - 允许传输的字节数(包括上传/下载)

  files_in_avail: - 允许上传的文件数

  files_out_avail: - 允许下载的文件数

  files_xfer_avail: - 允许传输的文件数(包括上传/下载)

  老实说用mysql和quota模块来验证用户和设置磁盘限额,但我总觉得还是不够完善,因为在这个方法中,数据库表里还没有相应的权限的字段,所以说相应用户的权限还是得用实际得用户即mysql对应得uid和gid来控制权限,那天要是mysql数据库也能完全控制权限就好了。

  大家如果觉得格式拷贝的时候可能会出错的话,不妨直接下载我的配置文件和数据库表

通过文章的详细描述,想必大家都知道了Proftpd的应用情况,希望对大家有帮助!

【编辑推荐】

  1. Proftpd学习笔记之配置
  2. Proftpd学习笔记之命令与配置
  3. Proftpd学习笔记之基本安装
  4. ProFTPD 畸形STAT指令参数远程DoS缺陷
  5. proftpd支持上传sfv校验的方法
  6. FTP服务 Proftpd + mysql + quota
  7. 使用MySQL认证ProFTPD用户需要什么
  8. Proftpd 大虾的学习笔记

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...