发现网上很多兄弟都在为安装proftpd+mysql+quota的种种问题苦恼。我就整理一下我的安装过程,当然也不是原创了。也提供了相关软件包永久下载,mysql/php/apache安装就免了。我的mysql是使用源码安装!
相关软件:
proftpd-1.2.9.tar.gz
proftpd-mod-quotatab-1.2.11.tar.gz
ftpdb.sql
proftpd.conf
步骤如下:
vi /etc/ld.so.conf
添加:/usr/local/mysql/lib
tar zvxf proftpd-1.2.9.tar.gz
tar zvxf proftpd-mod-quotatab-1.2.11.tar.gz
cp mod_quotatab/.c proftpd-1.2.9/contrib/
cp mod_quotatab/.h proftpd-1.2.9/contrib/
vi proftpd-1.2.9/contrib/mod_sql_mysql.c
#include 修改mysql.h的实际路径
cd proftpd-1.2.9
./configure \--prefix=/usr/local/proftpd \--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_ratio \--with-includes=/usr/local/mysql/include \--with-libraries=/usr/local/mysql/lib
make
make install
cp proftpd-1.2.9/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
vi /etc/rc.d/init.d/proftpd
修改:PATH=" $PATH:/usr/local/proftpd/sbin"
chmod 755 /etc/rc.d/init.d/proftpd
chkconfig --level 3 proftpd on
groupadd -g 5500 ftpgroup
adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
然后配置你的Proftpd.conf
最后就是启动啦。/usr/local/proftpd/sbin/proftpd
-------------------------------Proftpd.conf----------------------------------
This is a basic ProFTPD configuration file (rename it to
'proftpd.conf' for actual use. It establishes a single server
and a single anonymous login. It assumes that you have a user/group
"nobody" and "ftp" for normal operation and anon.
ServerName "ltsnet"
ServerType standalone
DefaultServer on
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
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
Set the user and group under which the server will run.
User nobody
Group nobody
To cause every FTP user to be "jailed" (chrooted) into their home
directory, uncomment this line.
ServerIdent off
DisplayLogin welcome.msg
DefaultRoot ~
Normally, we want files to be overwriteable.
1<directory></directory>
AllowOverwrite on
A basic anonymous configuration, no upload directories. If you do not
want anonymous users, simply delete this entire
1<anonymous> section.
2<anonymous ftp="" home="">
3User ftp
4Group ftp
5
6# We want clients to be able to login with "anonymous" as well as "ftp"
7UserAlias anonymous ftp
8
9# Limit the maximum number of anonymous logins
10MaxClients 10
11
12# We want 'welcome.msg' displayed at login, and '.message' displayed
13# in each newly chdired directory.
14DisplayLogin welcome.msg
15DisplayFirstChdir .message
16
17# Limit WRITE everywhere in the anonymous chroot
18<limit write="">
19DenyAll
20</limit>
21</anonymous>
22
23SQLAuthTypes Backend Plaintext
24SQLAuthenticate users* groups*
25
26SQLConnectInfo ftpdb@localhost root 123456
27SQLUserInfo ftpuser userid passwd uid gid homedir shell
28SQLGroupInfo ftpgroup groupname gid members
29SQLHomedirOnDemand on
30SQLLog PASS updatecount
31SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser
32SQLLog STOR,DELE modified
33SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
34
35QuotaEngine on
36QuotaDirectoryTally on
37QuotaDisplayUnits Mb
38QuotaShowQuotas on
39QuotaLog "/var/log/quota"
40SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
41SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
42SQLNamedQuery 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}'" ftpquotatallies
43SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
44QuotaLimitTable sql:/get-quota-limit
45QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
46
47建ftpdb库,在phpMyAdmin中导入ftpdb.sql就ok。
48
49\--------------------------------------ftpdb.sql---------------------------------
50
51# 表的结构 `ftpgroup`
52#
53
54CREATE TABLE `ftpgroup` (
55`groupname` varchar(16) NOT NULL default '',
56`gid` smallint(6) NOT NULL default '5500',
57`members` varchar(16) NOT NULL default '',
58KEY `groupname` (`groupname`)
59) TYPE=MyISAM COMMENT='ProFTP group table';
60
61#
62# 导出表中的数据 `ftpgroup`
63#
64
65INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');
66
67# --------------------------------------------------------
68
69#
70# 表的结构 `ftpquotalimits`
71#
72
73CREATE TABLE `ftpquotalimits` (
74`name` varchar(30) default NULL,
75`quota_type` enum('user','group','class','all') NOT NULL default 'user',
76`per_session` enum('false','true') NOT NULL default 'false',
77`limit_type` enum('soft','hard') NOT NULL default 'soft',
78`bytes_in_avail` float NOT NULL default '0',
79`bytes_out_avail` float NOT NULL default '0',
80`bytes_xfer_avail` float NOT NULL default '0',
81`files_in_avail` int(10) unsigned NOT NULL default '0',
82`files_out_avail` int(10) unsigned NOT NULL default '0',
83`files_xfer_avail` int(10) unsigned NOT NULL default '0'
84) TYPE=MyISAM;
85
86#
87# 导出表中的数据 `ftpquotalimits`
88#
89
90INSERT INTO `ftpquotalimits` VALUES ('test', 'user', 'true', 'hard', '9e+06', '2000', '9e+09', 2000, 2000, 2000);
91
92# --------------------------------------------------------
93
94#
95# 表的结构 `ftpquotatallies`
96#
97
98CREATE TABLE `ftpquotatallies` (
99`name` varchar(30) NOT NULL default '',
100`quota_type` enum('user','group','class','all') NOT NULL default 'user',
101`bytes_in_used` float NOT NULL default '0',
102`bytes_out_used` float NOT NULL default '0',
103`bytes_xfer_used` float NOT NULL default '0',
104`files_in_used` int(10) unsigned NOT NULL default '0',
105`files_out_used` int(10) unsigned NOT NULL default '0',
106`files_xfer_used` int(10) unsigned NOT NULL default '0'
107) TYPE=MyISAM;
108
109#
110# 导出表中的数据 `ftpquotatallies`
111#
112
113INSERT INTO `ftpquotatallies` VALUES ('test', 'user', '2000', '2000', '2000', 2000, 2000, 2000);
114
115# --------------------------------------------------------
116
117#
118# 表的结构 `ftpuser`
119#
120
121CREATE TABLE `ftpuser` (
122`id` int(10) unsigned NOT NULL auto_increment,
123`userid` varchar(32) NOT NULL default '',
124`passwd` varchar(32) NOT NULL default '',
125`uid` smallint(6) NOT NULL default '5500',
126`gid` smallint(6) NOT NULL default '5500',
127`homedir` varchar(255) NOT NULL default '',
128`shell` varchar(16) NOT NULL default '/sbin/nologin',
129`count` int(11) NOT NULL default '0',
130`accessed` datetime NOT NULL default '0000-00-00 00:00:00',
131`modified` datetime NOT NULL default '0000-00-00 00:00:00',
132PRIMARY KEY (`id`)
133) TYPE=MyISAM COMMENT='ProFTP user table' AUTO_INCREMENT=3 ;
134
135#
136# 导出表中的数据 `ftpuser`
137#
138
139INSERT INTO `ftpuser` VALUES (1, 'test', '123456', 5500, 5500, '/home/test', '/sbin/nologin', 36, '2004-09-28 13:07:41', '2004-09-28 13:07:42');
140
141quotalimits表
142
143name: - 用户帐号
144quota type: - user, group, class, all (we use user)
145per_session: - true or false (we use true)
146limit_type: - 硬限制 or 软限制 (我们一般用硬限制)
147bytes_in_avail: - 允许上传的字节数
148bytes_out_avail: - 允许下载的字节数
149bytes_xfer_avail: - 允许传输的字节数(包括上传/下载)
150files_in_avail: - 允许上传的文件数
151files_out_avail: - 允许下载的文件数
152files_xfer_avail: - 允许传输的文件数(包括上传/下载)
153
154按这些步骤来安装,应该没问题。老实说用mysql和quota模块来验证用户和设置磁盘限额,但我总觉得还是不够完善,因为在这个方法中,数据库表里还没有相应的权限的字段,所以说相应用户的权限还是得用实际得用户即mysql对应得uid和gid来控制权限,那天要是mysql数据库也能完全控制权限就好了。</anonymous>