LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2273|回复: 6

proftpd学习笔记-配置全功略

[复制链接]
发表于 2004-1-28 18:21:57 | 显示全部楼层 |阅读模式
献给大家的新年礼物哦, 国内关于proftp设置的文档实在太少,只能看着官方文档慢慢学习,特把学习经验分享给大家,祝大家新年快乐:)

原文地址:http://www.5ilinux.com/blog/archives/000082.html
转载请注明出处和署名,并请保持一致


proftpd学习笔记(一)
这几天,公司终于放假了,终于可以安下心来好好学些proftp+mysql+quota。

安装proftp之前,必须先做一个工作,假如你的mysql是自己编译的,那就必须先修改/etc/ld.so.conf,否则后面运行proftp会报错。
vi /etc/ld.so.conf

添加下面一行:


  1. /usr/local/mysql/lib/mysql
复制代码


注意大家如果mysql的安装路径于我不一样,则填写相应的路径,有关mysql的编译安装请参考《Linux+Apache+Mysql+PHP典型配置》。

1。下载相关软件

  1. wget [url]ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.9.tar.gz[/url]
复制代码

下载proftp的最新版本1.2.9
  1. wget [url]http://www.castaglia.org/proftpd/modules/proftpd-mod-quotatab-1.2.11.tar.gz[/url]
复制代码

这是配合proftp的磁盘限额的模块
2。解压编译


  1. tar zvxf proftpd-1.2.9.tar.gz

  2. tar zvxf proftpd-mod-quotatab-1.2.11.tar.gz

  3. cp mod_quotatab/*.c proftpd-1.2.9/contrib/

  4. cp mod_quotatab/*.h proftpd-1.2.9/contrib/
复制代码


vi proftpd-1.2.9/contrib/mod_sql_mysql.c
找到#include 这一行,将mysql.h改成你的系统中此文件所在的路径,如/usr/local/mysql/include/mysql/mysql.h
编译:

  1. ./configure \
  2. --prefix=/usr/local/proftpd \
  3. --with-modules=mod_sql:mod_sql_mysql:mod_quotatab\
  4. :mod_quotatab_sql \
  5. --with-includes=/usr/local/mysql/include/mysql \
  6. --with-libraries=/usr/local/mysql/lib/mysql
  7. make
  8. make install
复制代码


ok, 现在我们可以来启动proftp了,只要

  1. /usr/local/proftpd/sbin/proftpd
复制代码

用你的ftp客户端试验以下,应该可以正常登陆,包括匿名和linux用户名可以。

其实默认的proftp满足日常的服务器管理用还是绰绰有余的,有个地方还是要修改一下,就是默认proftp的配置文件不支持ftp续传,所以我们只要

  1. vi /usr/local/proftpd/etc/proftpd.conf
复制代码

添加以下两行

  1. AllowRetrieveRestart on
  2. AllowStoreRestart on
复制代码


重新启动以下proftp,就可以正常续传文件了。

创建proftpd脚本

只要在proftp的源代码目录

  1. cp proftpd-1.2.9/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
复制代码


记得修改proftpd文件,一般要修改proftpd的实际路径

  1. chmod 755 /etc/rc.d/init.d/proftpd
复制代码

ok

以后就可以用这个教本来启动,停止,重启proftp

呵呵,今天就讲这些,明天讲些proftp的一些基础配置:)

=======================================================

原文地址:http://www.5ilinux.com/blog/archives/000085.html
转载请注明出处和署名,并请保持一致

proftpd学习笔记(二)
上次我们讲了proftp的基本安装,由于我们后面有关于mysql和quota的设置,所以编译的时候把相应的模块都编译进去了,如果你不需要mysql和磁盘限额的功能,完全可以不需要这么编译。

这里要讲一个非常实用的命令,

  1. /usr/local/proftpd/sbin/ftpshut
复制代码

这个命令还是比较实用的,因为你可能需要不断的调整你的服务器,而这个命令就非常灵活,可以在不停止proftpd进程的前提下,定时停止ftp连接,这里将会详细说它是怎么使用的。


  1. ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]
复制代码



-l min: 在ftp关闭服务之前的几分钟内,尝试建立新的ftp连接均不被接受
-d min: 在ftp关闭服务之前的几分钟内,已经建立的ftp连接将被中止
time: 在多少时间后,服务器将关闭ftp服务,格式有两种
+number 经过number分钟后关闭
MMHH 在今天MM:HH服务器将关闭

注意,这里我们用这个命令是把ftp服务给停了,但实际的proftpd进程还没停止,所以一般调试ftp会使用到这个命令。

举例:
再经过30分钟后,FTP服务将关闭,在这之前的20分钟不可接受任何新的ftp连接,已经建立的在服务关闭前10分钟强制断线,并在客户端显示“FTP Server Will shutdown at time”


  1. ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time"
复制代码


其实ftpshut就是产生/etc/shutmsg ,你只要删除这个文件ftp又可以重新服务,或者
直接


  1. ftpshut -R
复制代码


好了,开始讲一些proftpd的基本配置吧,其实大家如果熟悉apache的配置的话,你会发现proftpd的设置基本都是类似的,它的配置基本格式是

  1. #全局设置
  2. 设置项目1 参数1
  3. 设置项目2 参数2

  4. #某个目录的设置
  5. <Directory "路径名">
  6. ...
  7. ...
  8. </Directory>

  9. #关于匿名用户的设置
  10. <Anonymous "匿名登陆的目录">
  11. ...
  12. ...
  13. <Limit 限制动作>
  14. ...
  15. ...
  16. </Limit>
  17. </Anonymous>
复制代码



我们用到的比较多的可能是Limit的使用,Limit大致有以下动作,基本能覆盖全部的权限了,大家灵活使用就是了。

  1. CMD:Change Working Directory 改变目录
  2. MKD:MaKe Directory 建立目录的权限
  3. RNFR: ReName FRom 更改目录名的权限
  4. DELE:DELEte 删除文件的权限
  5. RMD:ReMove Directory 删除目录的权限
  6. RETR:RETRieve 从服务端下载到客户端的权限
  7. STOR:STORe 从客户端上传到服务端的权限
  8. READ:可读的权限,不包括列目录的权限,相当于RETR,STAT等
  9. WRITE:写文件或者目录的权限,包括MKD和RMD
  10. DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的
  11. ALL:所有权限
  12. LOGIN:是否允许登陆的权限
复制代码



针对上面这个Limit所应用的对象,又包括以下范围
  1. AllowUser 针对某个用户允许的Limit
  2. DenyUser 针对某个用户禁止的Limit
  3. AllowGroup 针对某个用户组允许的Limit
  4. DenyGroup 针对某个用户组禁止的Limit
  5. AllowAll 针对所有用户组允许的Limit
  6. DenyAll 针对所有用户禁止的Limit
复制代码



关于限制速率的参数为:
  1. TransferRate STOR|RETR 速度(Kbytes/s) user 使用者
复制代码


下面我们以例子来解说proftp的配置,这样大家可能更加容易理解。

1。ftp服务器支持断点续传,且最大支持同时10人在线,每个ip只允许一个连接;
2。允许ftpusers用户组只能访问自己的目录,而不能访问上级或者其他目录;
3。用户登陆服务器时不显示ftp服务器版本信息,以增加安全性;
4。建立一个kaoyan的ftp帐户,属于ftpusers组,kaoyan用户只允许下载,没有可写的权限。下载速率限制在50Kbytes/s。
5。建立一个upload用户,也属于ftpusers组,同kaoyan用户的宿主目录一样,允许upload用户上传文件和创建目录的权限,但不允许下载,并且不允许删除目录和文件的权限,上传的速率控制在100Kbytes/s

先是前期的用户和组添加以及目录的权限设置

  1. group add ftpusers
  2. useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
  3. useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
  4. chown -R kaoyan:upload /home/kaoyan
  5. chmod -R 775 /home/kaoyan
复制代码


如果你只想ftpusers组的用户访问,可以设置成770都行。
设置/usr/local/proftpd/etc/proftpd.conf

注意#表示注释,对设置没影响,可以不写

  1. ServerName "Frank's FTP Server"
  2. ServerType standalone
  3. DefaultServer on
  4. Port 21
  5. Umask 022
  6. MaxInstances 30 #最多有30个proftpd的PID
  7. User nobody
  8. Group nobody
  9. TimeoutStalled 10
  10. MaxClients 10 #最多允许10个用户在线
  11. MaxClientsPerHost 1 "对不起,一个IP只允许一个连接"
  12. AllowStoreRestart on
  13. #允许断点续传(上传),断点续续(下载)是默认支持的,不用设置
  14. DisplayLogin welcome.msg #欢迎词文件
  15. ServerIdent off #屏蔽服务器版本信息
  16. DefaultRoot ~ ftpusers #设置ftpusers组只能访问自己的目录

  17. <Directory />
  18. AllowOverwrite on
  19. </Directory>
  20. <Directory /home/kaoyan>
  21. <Limit WRITE> #不允许写
  22. DenyUser kaoyan
  23. </Limit>
  24. <Limit RMD RNFR DELE RETR> #不允许删除,改名,下载
  25. DenyUser upload
  26. </Limit>
  27. TransferRate RETR 50 user kaoyan
  28. TransferRate STOR 100 user upload
  29. </Directory>
复制代码



我这里实现的方式还可以通过


  1. <Anonymous ~kaoyan>

  2. ...

  3. ...

  4. </Anonymous>

  5. <><Anonymous ~upload>

  6. ...

  7. ...

  8. </Anonymous>
复制代码


而且更加灵活,具体用那种方式,看大家了,我只是给大家入个门而已

好了,今天就讲到这里,明天继续讲一些proftp的其他配置

================================================================

原文地址:http://www.5ilinux.com/blog/archives/000088.html
转载请注明出处和署名,并请保持一致

proftpd学习笔记(三)
前面的两个笔记,我想大家对proftp的设置应该有些认识,是不是跟apache的配置差不多吧。我想配置过Serv_U服务器的,再稍微看一下proftp的配置规则,应该能马上能配置出一个强大的proftp服务器。

这里我们再讲一些proftp的其他参数配置:

MaxHostsPerUser 1 "对不起,每个帐户最多允许来源ip为1个"
#MaxHostsPerUser 对防止ftp帐号还是比较有用的。

MaxClientsPerUser 1 "对不起,每个帐户在每个客户端最多可以同时登陆1次"
#这个参数可以防止多线程软件下载对服务器的破坏

MaxClientsPerHost 1 "对不起,同一个客户端只能最多1个帐号可以登陆"
#比如ftp服务端有好多帐户你都有,但也只能用1个帐号登陆

呵呵,这三个Max参数比较容易搞晕,大家可要搞清他们的含义哦:)

WtmpLog on
#是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。

TimeoutIdle 600
#客户端idel时间设置,默认就是600秒

DisplayLogin welcome.msg
#设置ftp登陆欢迎信息文件

关于欢迎文件的设置包含如下参数


  1. %T 目前的时间

  2. %F 所在硬盘剩下的容量

  3. %C 目前所在的目录

  4. %R Client 端的主机名称

  5. %L Server 端的主机名称

  6. %U 使用者帐户名称

  7. %M 最大允许连接人数

  8. %N 目前的服务器连接人数

  9. %E FTP服务器管理员的 email

  10. %i 本次上传的文件数量

  11. %o 本次下载的文件数量

  12. %t 本次上传+下载的文件数量
复制代码


知道这些参数,我们就可以写出一个友好的欢迎语

vi /home/kaoyan/welcome.msg

  1. 欢迎您%U, 这是Frank的测试FTP服务器;
  2. 目前时间是:%T;
  3. 本服务器最多允许%M个用户连接数;
  4. 目前服务器上已有%N个用户连接数;
  5. 目前你所在的目录是%C;
  6. 目录所在的硬盘还剩下%F字节。
复制代码


让proftp支持现在流行的FXP传输方式,默认是不支持的。
只要在服务端设置


  1. AllowForeignAddress on

  2. PassivePorts 49152 65534 #端口也可自己指定喜欢的
复制代码


千万别忘了在客户端也要设置成支持FXP哦,否则想我试验了好几次,一直以为服务器没设置好,其实就是客户端没设置,呵呵。


如何让root能登陆,默认proftp是不支持root登陆,我们可以设置让root也能登陆ftp,不过我在这里还是建议大家最好不要让root能登陆ftp,设置如下

  1. RootLogin on
复制代码

如何禁止某个地址访问ftp
比如禁止10.1.1网段的机器访问ftp,可以这么设置


  1. <Limit LOGIN>
  2. Order deny,allow
  3. Deny from 10.1.1.
  4. Allow from all
  5. </Limit>
复制代码



虚拟ftp的建立,一般用于一台ftp服务器有好多ip地址,或者ftp用不同的端口,基本设置语法是:

比如我们要做一个端口是5555的ftp服务器:

  1. <VirtualHost 210.51.0.124>
  2. ServerName "Frank FTP Server"
  3. Port 5555
  4. ...
  5. <Directory 目录>
  6. ...
  7. <Limit 动作>
  8. ...
  9. </Limit>
  10. ...
  11. </Directory>
  12. </VirtualHost>
复制代码


至于虚拟主机中的其他设置跟我以前讲的基本差不多

上传/下载比率设置,我想用过Serv_U的朋友一定知道这个功能的使用,我们这里让proftp也实现这个功能。
要实现功能注意编译的时候加入ratio模块,否则proftp默认是不支持,假设有个帐户ftp1的ftp目录在/home/kaoyan ,然后我们设置ftp1的上传/下载比率是1:2(即上传1M,就可以下载2M)

  1. touch /home/kaoyan/ratio.dat
  2. touch /home/kaoyan/ratio.tmp
  3. chmod -R 666 /home/kaoyan
复制代码

在proftpd.conf设置如下


  1. Ratios on
  2. SaveRatios on
  3. RatioFile /home/kaoyan/ratio.dat
  4. RatioTempFile /home/kaoyan/ratio.tmp
复制代码


在相应的设置项里添加

  1. UserRatio ftp1 0 0 2 1000
  2. #UserRatio "使用者帐户" fileratio filequota byteratio bytequota
  3. #  fileratio :以文件为基础的比率,通常不限制,故为 0
  4. #  filequota :预设置能下载多少文件,不限制时为 0
  5. #  byteratio :就是上传/下载的比例,如果数字为2,表示1:2
  6. #  bytequota :预设置能下载多少 KBytes 的文件
  7. #上面设置的就是1:2的比率,默认只允许下载1M的文件
复制代码


ok,重启一下,以后ftp1就可以启用上传/下载比率了

===============================================================

原文地址:http://www.5ilinux.com/blog/archives/000091.html
转载请注明出处和署名,并请保持一致


proftpd学习笔记(四)
今天我们讲proftp+mysql+quota的应用,我想大家最期待的就是这个了吧

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

  1. groupadd -g 5500 ftpgroup
  2. adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
复制代码

2.操作数据库

  1. mysql mysql -uroot -ppassword
  2. create database ftpdb
  3. grant select, update on ftpdb.* to proftpd@localhost identified by 'password'
  4. use ftpdb


  5. CREATE TABLE `ftpgroup` (
  6. `groupname` varchar(16) NOT NULL default '',
  7. `gid` smallint(6) NOT NULL default '5500',
  8. `members` varchar(16) NOT NULL default '',
  9. KEY `groupname` (`groupname`)
  10. ) TYPE=MyISAM COMMENT='ProFTP group table';

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

  12. CREATE TABLE `ftpquotalimits` (
  13. `name` varchar(30) default NULL,
  14. `quota_type` enum('user','group','class','all') NOT NULL default 'user',
  15. `per_session` enum('false','true') NOT NULL default 'false',
  16. `limit_type` enum('soft','hard') NOT NULL default 'soft',
  17. `bytes_in_avail` float NOT NULL default '0',
  18. `bytes_out_avail` float NOT NULL default '0',
  19. `bytes_xfer_avail` float NOT NULL default '0',
  20. `files_in_avail` int(10) unsigned NOT NULL default '0',
  21. `files_out_avail` int(10) unsigned NOT NULL default '0',
  22. `files_xfer_avail` int(10) unsigned NOT NULL default '0'
  23. ) TYPE=MyISAM;

  24. CREATE TABLE `ftpquotatallies` (
  25. `name` varchar(30) NOT NULL default '',
  26. `quota_type` enum('user','group','class','all') NOT NULL default 'user',
  27. `bytes_in_used` float NOT NULL default '0',
  28. `bytes_out_used` float NOT NULL default '0',
  29. `bytes_xfer_used` float NOT NULL default '0',
  30. `files_in_used` int(10) unsigned NOT NULL default '0',
  31. `files_out_used` int(10) unsigned NOT NULL default '0',
  32. `files_xfer_used` int(10) unsigned NOT NULL default '0'
  33. ) TYPE=MyISAM;

  34. CREATE TABLE `ftpuser` (
  35. `id` int(10) unsigned NOT NULL auto_increment,
  36. `userid` varchar(32) NOT NULL default '',
  37. `passwd` varchar(32) NOT NULL default '',
  38. `uid` smallint(6) NOT NULL default '5500',
  39. `gid` smallint(6) NOT NULL default '5500',
  40. `homedir` varchar(255) NOT NULL default '',
  41. `shell` varchar(16) NOT NULL default '/sbin/nologin',
  42. `count` int(11) NOT NULL default '0',
  43. `accessed` datetime NOT NULL default '0000-00-00 00:00:00',
  44. `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  45. PRIMARY KEY (`id`)
  46. ) TYPE=MyISAM COMMENT='ProFTP user table';
复制代码



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

3.配置proftp文件

  1. ServerName "Frank's FTP Server" ServerType standalone DefaultServer on
  2. Port 21

  3. Umask 022

  4. MaxInstances 30
  5. MaxLoginAttempts 3

  6. User nobody
  7. Group nobody

  8. MaxHostsPerUser 1 "Sorry, you may not connect more than one time."
  9. MaxClientsPerUser 2 "Only one such user at a time."
  10. MaxClientsPerHost 3 "Sorry, you may not connect more than one time."

  11. RootLogin off
  12. RequireValidShell off
  13. TimeoutStalled 10
  14. MaxClients 10
  15. AllowForeignAddress on
  16. AllowStoreRestart on
  17. ServerIdent off
  18. DefaultRoot ~ ftpgroup

  19. SQLAuthTypes Backend Plaintext
  20. #Backend表示用户认证方式为MySQL数据库的认证方式
  21. #Plaintext表示明文认证方式,排在最前面的为最先使用的方式
  22. SQLAuthenticate users* groups*

  23. # databasename@host database_user user_password
  24. SQLConnectInfo ftpdb@localhost proftpd password
  25. SQLUserInfo ftpuser userid passwd uid gid homedir shell
  26. SQLGroupInfo ftpgroup groupname gid members
  27. SQLHomedirOnDemand on
  28. #如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录
  29. # Update count every time user logs in
  30. SQLLog PASS updatecount
  31. SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser
  32. # Update modified everytime user uploads or deletes a file
  33. SQLLog STOR,DELE modified
  34. SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

  35. QuotaEngine on
  36. QuotaDirectoryTally on
  37. QuotaDisplayUnits Mb
  38. QuotaShowQuotas on
  39. QuotaLog "/var/log/quota"
  40. SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avai
  41. l, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}'
  42. AND quota_type = '%{1}'"

  43. SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_i
  44. n_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

  45. SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used
  46. + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_
  47. out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquota
  48. tallies

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

  50. QuotaLimitTable sql:/get-quota-limit
  51. QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
复制代码




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

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

  1. INSERT INTO `ftpuser` VALUES (1, 'test', 'ftppasswd', 5500, 5500, '/home/test', '/sbin/nologin');
复制代码

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

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

  1. quotalimits表
  2. name: - 用户帐号
  3. quota type: - user, group, class, all (we use user)
  4. per_session: - true or false (we use true)
  5. limit_type: - 硬限制 or 软限制 (我们一般用硬限制)
  6. bytes_in_avail: - 允许上传的字节数
  7. bytes_out_avail: - 允许下载的字节数
  8. bytes_xfer_avail: - 允许传输的字节数(包括上传/下载)
  9. files_in_avail: - 允许上传的文件数
  10. files_out_avail: - 允许下载的文件数
  11. files_xfer_avail: - 允许传输的文件数(包括上传/下载)
复制代码



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


这个春节一直在学习proftp,终于可以松口气了,希望我的学习笔记可以对一些想学习proftp的朋友有所帮助,请多交流
发表于 2004-1-29 00:29:41 | 显示全部楼层
晕!那么好的文章,怎不加精??
谢谢兄弟了!
发表于 2004-1-29 08:47:52 | 显示全部楼层
谢谢分享,就需要这样的文章!
发表于 2004-1-30 01:37:35 | 显示全部楼层
好文章,我也需要,应该加精
发表于 2004-2-1 11:49:24 | 显示全部楼层
恩 不错 刚刚照着它配置了一个简单的ftp
发表于 2004-2-2 16:27:15 | 显示全部楼层
精典
发表于 2004-3-8 19:05:56 | 显示全部楼层
对于安装过程的几点意见。
我的mysql是自己编译的,放在/opt/mysql下面,不过我安装的时候即没有改etc/ld.so.conf,也没有改proftpd的mod_sql_mysql.c文件,编译和执行都没有问题。只要在编译的时候指定了那两个目录就可以了,似乎这两步是不需要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表