proftpd+mysql用户认证+quota磁盘限额 安装方法(最新版)

由 mars_diy 在 01-10-2003 04:39 发表:

proftpd+mysql用户认证+quota磁盘限额 安装方法(最新版)

proftpd+mysql用户认证+quota磁盘限额 安装方法(最新版)

整理编辑:mars ([email protected])

网上关于proftpd的安装文章实在是不少,我只是稍微整理了一下,并且使用了新的 quota磁盘限额模块

由于proftpd最新版1.2.8目前还是RC版,加上有些设置不能通用, 所以在这里还是使用1.2.7版

首先下载源码

proftpd1.2.7:

ftp://ftp.proftpd.org/distrib/sourc...d-1.2.7.tar.bz2

mod_quotatab-1.2.4 (1.2.5 版本的mod_quotatab是用在最新的1.2.8rc1上的)

http://www.castaglia.org/proftpd/mo...ab-1.2.4.tar.gz

假定你的机器上已经安装好了mysql

开始编译安装

将proftpd的源码包解压缩到某临时目录下:

localhost proftpd # tar -jxvf proftpd-1.2.7.tar.bz2

解压缩 mod_quotatab-1.2.4

localhost proftpd # tar -zxvf proftpd-mod-quotatab-1.2.4.tar.gz

进入 mod_quotatab 目录

localhost proftpd # cd mod_quotatab

把mod_quotatab中的文件拷贝到 proftpd 中的modules 目录中

localhost mod_quotatab # cp * ../proftpd-1.2.7/modules

在开始运行configure之前,我们要先改动一个文件

进入 proftpd-1.2.7/contrib 目录

localhost mod_quotatab # cd ../proftpd-1.2.7/contrib

修改 mod_sql_mysql.c

localhost contrib # vi mod_sql_mysql.c

找到#include

  1<mysql mysql.h=""> 把他该为你实际路径   
  2  
  3如果你的mysql 安装在 /usr/local/mysql 下,就把它修改为#include r   
  4  
  5然后   
  6  
  7localhost contrib # cd ..   
  8  
  9localhost proftpd-1.2.7 # cd ..   
 10  
 11localhost proftpd #./configure --prefix=DIR --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=DIR --with-libraries=DIR   
 12  
 13需要修改的三个地方   
 14  
 15\--prefix=DIR 你要安装到哪里   
 16  
 17\--with-includes=DIR mysql includes 目录   
 18  
 19\--with-libraries=DIR mysql lib 目录   
 20  
 21然后   
 22  
 23make   
 24  
 25make install 完成安装   
 26  
 27  
 28  
 29接下来,进入你安装好的proftpd目录 ,修改etc/proftpd.conf 文件开始配置   
 30  
 31基本配置我就不多说了,网上这类文章有很多,实在不会的话,自己找找就是了,这里主要介绍如何配置mysql用户认证和磁盘限额   
 32  
 33  
 34  
 35mysql 用户认证部分:   
 36  
 37proftpd.conf中加入以下内容   
 38  
 39  
 40  
 41#设置MySQL认证:   
 42  
 43#数据库联接的信息,DatabaseName是数据库名, HostName是主机名,   
 44  
 45#Port是端口号,UserName是连接数据库的用户名,Password是密码。   
 46  
 47SQLConnectInfo DatabaseName@HostName:port UserName Password   
 48  
 49  
 50  
 51#数据库认证的类型:   
 52  
 53SQLAuthTypes Backend Plaintext   
 54  
 55  
 56  
 57#指定用来做用户认证的表的有关信息。("FTPUSERS"和"FTPGRPS"是数据表名字,等一会而在下面建立)   
 58  
 59SQLUserInfo FTPUSERS userid passwd uid gid homedir shell   
 60  
 61  
 62  
 63SQLGroupInfo FTPGRPS groupname gid members   
 64  
 65  
 66  
 67#设置如果shell为空时允许用户登录:   
 68  
 69RequireValidShell off   
 70  
 71  
 72  
 73#数据库的鉴别   
 74  
 75SQLAuthenticate users groups usersetfast groupsetfast   
 76  
 77  
 78  
 79#如果home目录不存在,则系统会为根据它的home项新建一个目录:   
 80  
 81SQLHomedirOnDemand on   
 82  
 83  
 84  
 85然后在这个数据库中建立一个用户表FTPUSERS,这个表是必须的:   
 86  
 87  
 88  
 89use FTP;   
 90  
 91create table FTPUSERS (   
 92  
 93userid TEXT NOT NULL,   
 94  
 95passwd TEXT NOT NULL,   
 96  
 97uid INT NOT NULL,   
 98  
 99gid INT NOT NULL,   
100  
101home TEXT,   
102  
103shell TEXT   
104  
105);   
106  
107此表格是为了用户认证所需要的,其中useridpasswd是必不可少的,userid是用做FTP服务的用户名;passwd是指此用户的密码;uid是系统用户的ID,也就是所映射的系统用户;gid是所属系统组的IDhome是该用户所在的HOME目录;shell可以为该用户指定相应的shell。当然你可以建立更多的字段,例如:用来记录用户登录次数的count,或者是日期的date,如果你对配置熟悉了之后,你可以根据自己的喜欢添加更多的功能。在此就不多讲。   
108  
1093、如果你想需要所有的功能,你还可以添加另外一个需要的表:FTPGRPS,也就是确定组的表格,当然也可以不用,这里讲一个它的格式:   
110  
111create table FTPGRPS (   
112  
113grpname TEXT NOT NULL,   
114  
115gid SMALLINT NOT NULL,   
116  
117members TEXT NOT NULL,   
118  
119);   
120  
121其中grpname是组的名称,gid是系统组的IDmembers是组的成员。注意:多成员,他们之间要用逗号隔开,不能使用空格。   
122  
123  
124  
1254、为空表格插入记录:   
126  
127INSERT INTO FTPUSERS (userid, passwd, uid, gid, home, shell)   
128  
129valueS ('user1', '999999', '1000', '1000', '/home/FTP/user1', '' );   
130  
131  
132  
133按此格式你可以插入这每一个用户添加一个记录。   
134  
135如果你要想应用到更多的功能,且建立了组的表格,你也要为此添加记录,不过一定要注意在members的字段多个成员一定要用逗号隔开。   
136  
137  
138  
139INSERT INTO FTPGRPS VALUES ('FTPGRPS', 1000, 'FTPUSR');   
140  
141四、为FTP用户建立相应的系统用户。   
142  
143在本例中,只整个FTP服务只提供一个有效的系统用户FTPUSR和组FTPGRP,当然你也可以设置多个系统用户。但出于安全的考虑,我只设一个,用他来启动FTP daemon,并把所有的FTP用户映射过这个用户。   
144  
145  
146  
147先建立FTPGRP组:   
148  
149groupadd g 1000 r FTPGRP   
150  
151建立FTPUSR用户:   
152  
153adduser u 1000 g 1000 d /home/FTP s /bin/bash r FTPUSR   
154  
155  
156  
157FTPUSR建立HOME,把所有的FTP user 活动空间全放在此目录下:   
158  
159mkdir /home/FTP   
160  
161chown FTPUSR /home/FTP   
162  
163chgrp FTPGRP /home/FTP   
164  
165  
166  
167到这里MYSQL认证部分就算基本配置好了,接下来是磁盘限额部分   
168  
169  
170  
171首先,还是编辑proftpd文件   
172  
173  
174  
175#磁盘限额部分   
176  
177QuotaDirectoryTally on   
178  
179  
180  
181#磁盘限额单位 b"|"Kb"|"Mb"|"Gb"   
182  
183QuotaDisplayUnits "Kb"   
184  
185  
186  
187QuotaEngine on   
188  
189  
190  
191#磁盘限额日志记录   
192  
193QuotaLog "你的LOG路径"   
194  
195  
196  
197# 打开磁盘限额信息,当登陆FTP帐户后,使用命令 "quote SITE QUOTA" 后可显示当前用户的磁盘限额   
198  
199QuotaShowQuotas on   
200  
201  
202  
203#以下是SQL调用语句,不用修改直接拷贝过去   
204  
205  
206  
207SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, \   
208  
209bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits \   
210  
211WHERE name = '%{0}' AND quota_type = '%{1}'"   
212  
213  
214  
215SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, \   
216  
217bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies \   
218  
219WHERE name = '%{0}' AND quota_type = '%{1}'"   
220  
221  
222  
223SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, \   
224  
225bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \   
226  
227files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \   
228  
229files_xfer_used = files_xfer_used + %{5} \   
230  
231WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies   
232  
233  
234  
235SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies   
236  
237  
238  
239QuotaLimitTable sql:/get-quota-limit   
240  
241QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally   
242  
243  
244  
245然后建立mysql 数据表   
246  
247CREATE TABLE quotalimits (   
248  
249name VARCHAR(30),   
250  
251quota_type ENUM("user", "group", "class", "all") NOT NULL,   
252  
253per_session ENUM("false", "true") NOT NULL,   
254  
255limit_type ENUM("soft", "hard") NOT NULL,   
256  
257bytes_in_avail FLOAT NOT NULL,   
258  
259bytes_out_avail FLOAT NOT NULL,   
260  
261bytes_xfer_avail FLOAT NOT NULL,   
262  
263files_in_avail INT UNSIGNED NOT NULL,   
264  
265files_out_avail INT UNSIGNED NOT NULL,   
266  
267files_xfer_avail INT UNSIGNED NOT NULL   
268  
269);   
270  
271  
272  
273CREATE TABLE quotatallies (   
274  
275name VARCHAR(30) NOT NULL,   
276  
277quota_type ENUM("user", "group", "class", "all") NOT NULL,   
278  
279bytes_in_used FLOAT NOT NULL,   
280  
281bytes_out_used FLOAT NOT NULL,   
282  
283bytes_xfer_used FLOAT NOT NULL,   
284  
285files_in_used INT UNSIGNED NOT NULL,   
286  
287files_out_used INT UNSIGNED NOT NULL,   
288  
289files_xfer_used INT UNSIGNED NOT NULL   
290  
291);   
292  
293  
294  
295说明一下,quotatallies表不需要作修改,它记录了用户当前的磁盘使用情况,由程序自动记录   
296  
297要注意的是quotalimits 表中一些字段的含意   
298  
299quota_type 磁盘限额的鉴别,可以设置单各用户,也可以设置一各组中的全部用户,还可以设置全部用户   
300  
301bytes_in_avail 上传最大字节数,就是FTP用户空间容量 (设置个字段的时候是以byte(字节)为单位,如果要限额在10M,那就是10240000,下面也一样)   
302  
303bytes_out_avail 下载最大字节数,需要注意的是,这个字段中记录的是用户总共能从服务器上下载多少数据,数据是累计的。   
304  
305bytes_xfer_avail 总共可传输的文件的最大字节数(上传和下载流量)需要注意的是,这个字段中记录的是用户总共能传输文件的最大字节数,数据是累计的。   
306  
307files_in_avail INT 总共能上传文件的数目   
308  
309files_out_avail INT 能从服务器上下载文件的总数目   
310  
311files_xfer_avail INT 总共可传输文件的数目(上传和下载)   
312  
313  
314  
315好了,开始使用磁盘限额,我们要将上面建立的user1帐号给予10M空间,最多能上传500个文件到服务器上,文件传输流量为20M,只能传输10个文件。只要在MYSQL   
316  
317插入   
318  
319INSERT INTO `quotalimits` ( `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` )   
320  
321VALUES ('user1', 'user', 'false', 'soft', '10240000', '0', '2048000', '500', '0', '10');   
322  
323就可以了,不需要设置的部分用0代替就可以了   
324  
325现在运行proftpd,登陆到user1 ,使用quote SITE QUOTA 就会显示user1用户的磁盘使用情况   
326  
327  
328  
329ftp&gt; quote SITE QUOTA   
330  
331200-The current quota for this session are [current/limit]:   
332  
333Name: user1   
334  
335Quota Type: User   
336  
337Per Session: False   
338  
339Limit Type: Soft   
340  
341Uploaded Kb: 0.00/10000.00   
342  
343Downloaded Kb: unlimited   
344  
345Transferred Kb: 0.00/2000.00   
346  
347Uploaded files: 0/500   
348  
349Downloaded files: unlimited   
350  
351Transferred files: 0/10   
352  
353200 Please contact root@localhost if these entries are inaccurate   
354  
355  
356  
357OK,安装完毕 
358
359  
360
361
362* * *
363
364  
365_ hyoga  01-10-2003 08:22 发表:_   
366  
367
368
369****
370
371  
372  
373
374
375good good article,3q! 
376
377__________________   
378  
379被国人毁了的四个词:同志,小姐,农民,黑客 
380
381  
382
383
384* * *
385
386  
387_ konds  01-13-2003 17:20 发表:_   
388  
389
390
391****
392
393  
394  
395
396
3973q 
398
399  
400
401
402* * *
403
404  
405_ 奥汀  01-13-2003 17:37 发表:_   
406  
407
408
409****
410
411  
412  
413
414
415好文章。。收藏 
416
417  
418
419
420* * *
421
422  
423_ luyongshou  01-16-2003 09:09 发表:_   
424  
425
426
427**我的服务器为什么不让我登录**
428
429  
430  
431
432
433我按您的程序安装以后,服务也能启动了,用ps -aux 查看也可以找到这个进程,但当我登录的时候他却告诉我,服务没有启动!为什么呀大虾? 
434
435  
436
437
438* * *
439
440  
441_ n0fe@r  01-16-2003 09:37 发表:_   
442  
443
444
445****
446
447  
448  
449
450
451用基于file-based quota更方便些,mysql太麻烦了 
452
453  
454
455
456* * *
457
458  
459_ luyongshou  01-16-2003 12:14 发表:_   
460  
461
462
463**请问mysql中的用户怎么限制在他自己的目录呀**
464
465  
466  
467
468
469我想知道mysql中的用户怎么来把它限制在自己的目录下?我现在的用户可以看到根目录! ![](http://linuxsir.zahui.net/html/11/http_3A/linuxsir.zahui.net/html/11/images/smilies/frown.gif)
470
471  
472
473
474* * *
475
476  
477_ mars_diy  01-17-2003 03:11 发表:_   
478  
479
480
481**Re: 请问mysql中的用户怎么限制在他自己的目录呀**
482
483  
484  
485
486
487&gt; quote: 
488&gt; 
489&gt; * * *
490&gt; 
491&gt; _最初由 luyongshou 发布_   
492&gt;    
493&gt;  **我想知道mysql中的用户怎么来把它限制在自己的目录下?我现在的用户可以看到根目录!![](http://linuxsir.zahui.net/html/11/http_3A/linuxsir.zahui.net/html/11/images/smilies/frown.gif) **
494&gt; 
495&gt; * * *
496
497  
498  
499  
500  
501  
502  
503加上 DefaultRoot ~ 
504
505  
506
507
508* * *
509
510  
511_ mars_diy  01-17-2003 03:14 发表:_   
512  
513
514
515**Re: 我的服务器为什么不让我登录**
516
517  
518  
519
520
521&gt; quote: 
522&gt; 
523&gt; * * *
524&gt; 
525&gt; _最初由 luyongshou 发布_   
526&gt;    
527&gt;  **我按您的程序安装以后,服务也能启动了,用ps -aux 查看也可以找到这个进程,但当我登录的时候他却告诉我,服务没有启动!为什么呀大虾?**
528&gt; 
529&gt; * * *
530
531  
532  
533  
534  
535请讲的再详细点 
536
537  
538
539
540* * *
541
542  
543_ hyoga  01-18-2003 09:43 发表:_   
544  
545
546
547****
548
549  
550  
551
552
553myars兄,我遇到问题了。我是严格按照你的文章做的。启动服务正常,到登陆的时候这样:   
554  
555[root@Dserver proftpd-1.2.7]# /etc/rc.d/init.d/proftpd restart   
556  
557Shutting down proftpd... [ 确定 ]   
558  
559Starting proftpd... [ 确定 ]   
560  
561[root@Dserver proftpd-1.2.7]# ftp 192.168.0.200   
562  
563Connected to 192.168.0.200 (192.168.0.200).   
564  
565220 ProFTPD 1.2.7 Server (ProFTPD Default Installation) [Dserver.jctx.com]   
566  
567Name (192.</mysql>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus