Proftpd学习笔记之应用

系统 Linux
ProFTPD是一个Unix平台、或Unix类(如Linux, FreeBSD等)FTP服务器程序,它是在自由软件基金会版权声明下开发、发布的免费软件,即任何只要遵守自由软件基金会版权声明的人,都可以修改源始码。从今天开始我为大家从头到脚解析下Proftpd,今天讲Proftpd的应用!

 

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 大虾的学习笔记

 

责任编辑:赵鹏 来源: 网络转载
相关推荐

2011-03-08 16:30:40

Proftpd

2011-03-08 16:15:22

Proftpd安装

2011-03-08 16:30:30

Proftpd命令Proftpd配置

2011-03-08 15:01:08

Proftpd

2011-02-25 10:25:07

Proftpd

2011-02-25 10:36:12

Proftpd

2011-08-15 17:52:21

iPhone应用对象NSString

2011-09-09 11:05:56

Widget

2011-08-09 17:29:29

iPhone文件屏幕

2011-09-09 13:59:17

Android wid

2011-03-03 09:26:59

ProFTPD服务器管理

2009-06-18 11:25:26

Hibernate L

2011-09-14 15:30:00

MongoDB

2011-08-08 14:57:46

iPhone Autoreleas Property

2011-08-19 15:16:41

XCodeUserScripts脚本

2011-09-07 16:36:00

Qt Widget

2016-09-20 10:26:25

LaravelPHPMiddleware

2011-09-09 17:24:39

Qt Webkit模块

2011-09-13 10:07:10

PhoneGap

2010-09-26 16:55:31

JVM学习笔记
点赞
收藏

51CTO技术栈公众号