Chinaunix首页 | 论坛 | 博客
  • 博客访问: 634525
  • 博文数量: 184
  • 博客积分: 10057
  • 博客等级: 上将
  • 技术积分: 2505
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-31 16:34
文章分类

全部博文(184)

文章存档

2010年(5)

2009年(104)

2008年(75)

我的朋友

分类:

2009-08-18 22:35:32

  ProFTPD是一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(GPL)下开发、发布的免费软件,也就是说任何人只要遵守GPL版权声明,都可以随意修改源始码。 
  ProFTPD设计目标是实现一个安全且易于设定的FTP Server。目前Unix或类Unix平台上FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。虽然wu-ftpd有着极佳的效能同时也是一套很好的软件,然而它却欠缺了许多Win32平台上FTP Server的一些特色,同时wu-ftpd过去也有不少的安全漏洞陆续被发现。ProFTPD的原创者本身就曾经花非常多的时间寻找wu-ftpd的漏洞加以改进并且增加许多功能。然而十分不幸的是,他很快地发现显然wu-ftpd需要全部重新的改写才能补足欠缺的设定能力以及缺乏的一些功能。 ProFTPD不是从其它FTP Server的既有原始码修改而产生的,相反的,它是完全独立而完整、重新改写的FTP Server。 
   ProFTPD的主要包括如下特点: 
  * 单一主设置文件,包含许多指令以及其支配的组,pache Web Serve的设置不陌生的话相信一定会觉得十分容易操作设定。 
  * 每个目录都可以定义一个".ftpaccess"设置文件,就如同Apache的".htaccess"文件一样可以设定
  该目录的存取权限。 
  * 可设定多个虚拟FTP server,而匿名FTP服务更是十分容易。 
  * 可根据系统的负载(load)选择以单独运作(stand-alone)方式或是由inetd启动。 
  * 匿名FTP的根目录不需要特定的目录结构、系统二进制执行文件或其它系统文件。 
  * ProFTPD不执行任何外部程序以免造成安全漏洞。 
  * 具有隐藏目录或隐藏文件,源自于Unix形式的档案权限,或是user/group类型的档案权限设定。 
  * 能够以一般使用者在单独运作(stand-alone)模式下执行,以减少某些藉由攻击方式取得root权的可能性。注:此功能与Unix的操作系统有关。 
  * 支持系统记录以及utmp/wtmp。 
  记录的方式与wu-ftpd的标准完全兼容,也支持记录内容的延伸格式。 
  * 支持Shadow&! nbsp;password,包括了帐号使用期限设定的功能。
  编译和安装  
  Proftpd提供了多种安装格式,包括源代码方式、RPM方式、deb方式(debian软件包)等。本文主要讨论源代码方式的安装。 
  从下载最新版本的proftpd-1.2.0rc3到Linux服务器上。然后按照如下步骤进行处理: 
  [root@ftpd /]# cp proftpd-1.2.0rc3.tar.gz /usr/src/ 
  [root@ftpd /]# cd /usr/src 
  [root@ftpd src]# tar xvfz proftpd-1.2.0rc3.tar.gz 
  [root@ftpd src]# cd proftpd-1.2.0rc3 
  [root@pftd proftpd-1.2.0rc3]# ./configure 
  [root@pftd proftpd-1.2.0rc3]# make 
  [root@pftd proftpd-1.2.0rc3]# make install 
  到现在为止,你已经完成了proftpd的编译和安装。并且在/usr/local/etc/目录下有一个默认的proftpd配置文件proftpd.conf。 
  启动测试 
  对于笔者的试验系统RedHat6.2来说,需要将该配置文件中: 
  Group nogrou! p 
  修改为: 
  Group nobody 
  因为redhat系统中nobody用户属于nobody组,而不是nogroup组。 
  若需要将proftpd设置为系统启动时自动启动则通过如下命令拷贝启动文件: 
  [root@ftpd proftpd-1.2.0rc3]# cp ./contrib/dist/rpm/proftpd.init.d /etc/rc.d 
  /init.d/proftpd 
  然后修改该脚本的可执行属性: 
  [root@ftpd /]# chmod +x /etc/rc.d/init.d/proftpd 
  然后编辑/etc/rc.d/init.d/functions: 
  修改 
  export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin" 
  为 
  export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin" 
  注:若将在运行./cofigure命令时通过--prefix选项指定将proftpd安装在/usr/sbin目! 录下则不需要修改fuctions文件。 
  然后运行命令: 
   [root@ftpd rc3.d]# chkconfig --level 35 proftpd on 
  则下次系统启动以后,proftpd将自动启动。 
  最后,需要确保系统当前没有ftp服务器在运行: 
  [root@ftpd /]# netstat -ln 
  若输出中不包含 
  tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 
  这样的内容则可以直接启动proftpd,否则需要关闭以前的ftpd服务器。对于一般的缺省Linux安装来说,则需要通过以下的途径来关闭ftp服务器: 
  编辑/etc/inetd.conf文件,在 
  ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a 
  一行前加上#: 
  #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a 
  然后: 
  [root@ftpd ! /]# ps ax|grep inetd 
  350 ? S 0:00 inetd 
  得到inetd的进程号 ,重新启动inetd进程: 
  [root@ftpd /]# kill -HUP 350  
  然后通过如下命令启动proftpd: 
  [root@ftpd /]# /etc/rc.d/init.d/proftpd start 
   这时候可以通过如下命令来测试proftpd是否正常运行: 
  C:WINDOWS>ftp 192.168.2.33 
  Connected to 192.168.2.33. 
  220 ProFTPD 1.2.0rc3 Server (ProFTPD Default Installation)[ftpd.test.com.cn] 
  User (192.168.2.33:(none)): ideal 
  Password: 
  230 User ideal logged in. 
  ftp> 
  则现在你就拥有了一个安全可靠的ftp服务器。
  FAQ 
  1、我安装proftpd以后,出现了问题,我如何调试? 
  通过通过命令! /usr/local/sbin/proftpd -d9 -n启动proftpd来进行调试,则proftp d就会将调试信息打印到consle上以供调试之用。 
  2、为什么我的proftpf启动以后,匿名用户不能登录? 
  查看proftp配置文件/usr/local/etc/proftpd.conf,修改(这里/home/ftp可以是任何希望匿名用户登录以后的当前根目录,但是确保要使该目录允许ftp用户访问),并且若 部分的User指令指定的用户为ftp用户,则需要在配置文件中添加如下命令指示: 
  RequireValidShell off 
  3、我如何实现一个正常用户登录以后将其的访问限定在某个目录之下? 
  可以通过指令DefaultRoot来实现。例如若希望将ftpusers组的用户限定在自己的home目录下,则需要首先创建该组: 
  /usr/sbin/groupadd ftpusers 
  然后将用户ideal加入到该组中: 
  usrmod -G ftpusers ideal 
  最后在在proftpd.conf文件中添加如下内容: 
  DefaultRoot ~ ftpusers 
  也可以限制用户登录以后仅仅访问自己主目录下的一个子目录: 
  Default! Root ~/anoftp ftpusers 
  当然也可以将用户限制在其他目录之下,而不是自己的home目录下: 
  DefaultRoot /tmp ftpusers 
  也可以限定一个用户组的某些用户被限制,而其他不作限制: 
  DefaultRoot ~ ftpusers,!empolyee 
  这个指令指示仅仅限制ftpusers组中的不是empolyee组的用户进行限制。 
  4、我如何使用户登陆时不显示ftp服务器版本信息,以增强安全性? 
  在proftpd.conf中添加如下内容: 
  ServerIdent off 
  则再次登录时,显示如下内容: 
  C:WINDOWS>ftp 192.168.2.33 
  Connected to 192.168.2.33. 
  220 ftpd.test.com.cn FTP server ready. 
  User (192.168.2.33:(none)): 
  5、在proftpd环境下如何设定虚拟主机? 
  可以通过指令:VirtualHost来实现,一个最简单的例子: 
   
  ServerName "virtual FTP server" 
   
  若你仅仅希望通过匿名访问某个虚拟主机,则使用如下! 的指令: 
   
  Serv erName "virtual FTP server" 
   
  DenyAll 
   
   
  User private 
  Group private 
   
  AllowAll 
   
   
   
  这样192.168.2.35的这台主机则仅仅允许匿名登录。
  笔者的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 &! quot;test.com.cn FTP Server" 
  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&! nbsp;limit maximum number of processes per&nb sp;service 
  # (such as xinetd) 
  MaxInstances 30 
  RequireValidShell off 
  ServerIdent off 
  # Set the user and group that the server normally runs at. 
  User nobody 
  Group nobody 
  # Normally, we want files to be overwriteable. 
   
  AllowOverwrite on 
   
  # A basic anonymous configuration, no upload directories. 
   
  User ftp 
  Group ftp 
  # We want clients to be able to login with "anonymous" as well as "ftp" 
  UserAlias anonymous ftp 
  # Limit the maximum number of anonymous logins 
  MaxClients 10 
  # We ! ;want 'welcome.msg' displayed at login, and '.message' displayed 
  # in each newly chdired directory. 
  DisplayLogin welcome.msg 
  DisplayFirstChdir .message 
  # Limit WRITE everywhere in the anonymous chroot 
   
  DenyAll 
   
   
  DefaultRoot ~ ftpusers 
   
  ServerName "virtual FTP server" 
   
  DenyAll 
   
   
  User private 
  Group private 
   
  AllowAll 
   
   
  
 
 
 
 
 
 
 
外一篇:
LOGIN:是否允许登陆的权限
针对上面这个Limit所应用的对象,又包括以下范围
AllowUser 针对某个用户允许的Limit
DenyUser 针对某个用户禁止的Limit
AllowGroup 针对某个用户组允许的Limit
DenyGroup 针对某个用户组禁止的Limit
AllowAll 针对任何用户组允许的Limit
DenyAll 针对任何用户禁止的Limit
关于限制速率的参数为:
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 ..
先是前期的用户和组添加连同目录的权限配置 .
group add ftpusers
useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
chown -R kaoyan:upload /home/kaoyan
chmod -R 775 /home/kaoyan
假如您只想ftpusers组的用户访问,能够配置成770都行。
配置/usr/local/proftpd/etc/proftpd.conf .
注意#表示注释,对配置没影响,能够不写 !
ServerName "Frank's FTP Server"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30 #最多有30个proftpd的PID
User nobody
Group nobody
TimeoutStalled 10
MaxClients 10 #最多允许10个用户在线
MaxClientsPerHost 1 "对不起,一个IP只允许一个连接"
AllowStoreRestart on
#允许断点续传(上传),断点续续(下载)是默认支持的,不用配置
DisplayLogin welcome.msg #欢迎词文档
ServerIdent off #屏蔽服务器版本信息
DefaultRoot ~ ftpusers #配置ftpusers组只能访问自己的目录

AllowOverwrite on


#不允许写
DenyUser kaoyan

#不允许删除,改名,下载
DenyUser upload

TransferRate RETR 50 user kaoyan
TransferRate STOR 100 user upload
根据专家观察,这样的理论和现象都是值得各位站长深思的,所以希望大家多做研究学习,争取总结出更多更好的经验!
 
我这里实现的方式还能够通过
...
...
<>
...
...

 
 
 
 
 
外二篇
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登陆欢迎信息文档 ..
关于欢迎文档的配置包含如下参数
版权申明:本站文章均来自网络,本站所有转载文章言论不代表本站观点
%T 现在的时间
%F 所在硬盘剩下的容量
%C 现在所在的目录
%R Client 端的主机名称
%L Server 端的主机名称
%U 使用者帐户名称
%M 最大允许连接人数
%N 现在的服务器连接人数
%E FTP服务器管理员的 email
%i 本次上传的文档数量
%o 本次下载的文档数量
%t 本次上传 下载的文档数量
知道这些参数,我们就能够写出一个友好的欢迎语 ..
vi /home/kaoyan/welcome.msg 本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系。
欢迎您%U, 这是Frank的测试FTP服务器;
现在时间是:%T;
本服务器最多允许%M个用户连接数;
现在服务器上已有%N个用户连接数;
现在您所在的目录是%C;
目录所在的硬盘还剩下%F字节。
让proftp支持现在流行的FXP传输方式,默认是不支持的。
只要在服务端配置
版权申明:本站文章均来自网络.
AllowForeignAddress on
PassivePorts 49152 65534 #端口也可自己指定喜欢的
 
 
 
 
外三篇
如何让root能登陆,默认proftp是不支持root登陆,我们能够配置让root也能登陆ftp,但是我在这里还是建议大家最好不要让root能登陆ftp,配置如下 .
RootLogin on
如何禁止某个地址访问ftp
比如禁止10.1.1网段的机器访问ftp,能够这么配置
.

Order deny,allow
Deny from 10.1.1.
Allow from all

虚拟ftp的建立,一般用于一台ftp服务器有好多ip地址,或ftp用不同的端口,基本配置语法是: ..
比如我们要做一个端口是5555的ftp服务器: . 

ServerName "Frank FTP Server"
Port 5555
...

...

...

...

至于虚拟主机中的其他配置跟我以前讲的基本差不多 .
上传/下载比率配置,我想用过Serv_U的朋友一定知道这个功能的使用,我们这里让proftp也实现这个功能。
要实现功能注意编译的时候加入ratio模块,否则proftp默认是不支持,假设有个帐户ftp1的ftp目录在/home/kaoyan ,然后我们配置ftp1的上传/下载比率是1:2(即上传1M,就能够下载2M) .
touch /home/kaoyan/ratio.dat
touch /home/kaoyan/ratio.tmp
chmod -R 666 /home/kaoyan
在proftpd.conf配置如下
.
Ratios on
SaveRatios on
RatioFile /home/kaoyan/ratio.dat
RatioTempFile /home/kaoyan/ratio.tmp
在相应的配置项里添加 ..
UserRatio ftp1 0 0 2 1000
#UserRatio "使用者帐户" fileratio filequota byteratio bytequota
#  fileratio :以文档为基础的比率,通常不限制,故为 0
#  filequota :预配置能下载多少文档,不限制时为 0
#  byteratio :就是上传/下载的比例,假如数字为2,表示1:2
#  bytequota :预配置能下载多少 KBytes 的文档
#上面配置的就是1:2的比率,默认只允许下载1M的文档 ...
ok,重启一下,以后ftp1就能够启用上传/下载比率了 ..
 
 
 
 
 
 
 
阅读(727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~