1.安装
新版的proftp中已经有mod_quotatab了,所以不用另外下载了。 # tar -zxvf proftpd-1.2.10.tar.gz # cd proftpd-1.2.10 # ./configure \ --prefix=/usr/local/proftpd \ --with-includes=/usr/local/mysql/include/mysql \ --with-libraries=/usr/local/mysql/lib/mysql \ --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_ratio # make # make install 设置自启动 # cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd # chmod 755 /etc/rc.d/init.d/proftpd # chkconfig --level 0123456 proftpd on 修改/etc/rc.d/init.d/proftpd # vi /etc/rc.d/init.d/proftpd 把 PATH="$PATH:/usr/local/sbin" 改为 PATH="$PATH:/usr/local/proftpd/sbin" 修改/usr/local/proftpd/etc/proftpd.conf # vi /usr/local/proftpd/etc/proftpd.conf 把Group nogroup 改为 Group nobody 再添加两行,使支持续传(默认是不支持的) AllowRetrieveRestart on AllowStoreRestart on 启动服务 # service proftpd start 2.proftpd的结构 proftpd.conf:这个是主要的 proftpd 的设定档。在 RPM 安装的范例中,所在的目录为 /etc/proftpd.conf ,在这个范例中,则是在/usr/local/proftpd/etc/proftpd.conf。 /usr/local/proftpd/sbin/proftpd:这个是主要的 proftpd 的 daemon 执行档。此外,这也是 TCP Wrappers (/etc/hosts.deny(allow)) 设定里头的服务档案档名。另外,当proftpd 在启动的时候会去读取设定档,也就是proftpd.conf这个档案,不过,我们也可以指定其它的档案来进行proftpd的设定。 # proftpd -c /usr/local/proftpd/etc/proftpd.conf /usr/local/proftpd/bin/ftpcount:目前在主机上面使用 proftpd 的联机数,直接在指令列下达 ftpcount 即可。 /usr/local/proftpd/sbin/ftpshut:指定再过多久之后 proftpd 服务会终止。语法如下: 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” # ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time" 其实ftpshut就是产生/etc/shutmsg ,你只要删除这个文件ftp又可以重新服务,或者直接 # ftpshut -R /usr/local/proftpd/bin/ftpwho:可以用来察看目前有多少人使用 proftpd 这个服务。简单的语法直接下达 ftpwho 即可,如下所示: # ftpwho standalone FTP daemon [8451]: 10194 badbird [ 0m 11s] 0m 6s (idle) Service class - 1 user 如上所示,目前有一个使用者,名为badbird的账号,在使用proftpd。 3.proftpd.conf 3.1.proftpd.conf 的设定方式 proftpd的设置和apache类似,它的配置基本格式如下: #全局设置 设置项目1 参数1 设置项目2 参数2 #某个目录的设置 ... ... #关于匿名用户的设置 ... ... ... ... 我们用到的比较多的可能是Limit的使用,Limit大致有以下动作,基本能覆盖全部的权限了,大家灵活使用就是了。 CMD:Change Working Directory 改变目录 MKD:MaKe Directory 建立目录的权限 RNFR: ReName FRom 更改目录名的权限 DELE:DELEte 删除文件的权限 RMD:ReMove Directory 删除目录的权限 RETR:RETRieve 从服务端下载到客户端的权限 STOR:STORe 从客户端上传到服务端的权限 READ:可读的权限,不包括列目录的权限,相当于RETR,STAT等 WRITE:写文件或者目录的权限,包括MKD和RMD DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的 ALL:所有权限 LOGIN:是否允许登陆的权限 针对上面这个Limit所应用的对象,又包括以下范围 AllowUser 针对某个用户允许的Limit DenyUser 针对某个用户禁止的Limit AllowGroup 针对某个用户组允许的Limit DenyGroup 针对某个用户组禁止的Limit AllowAll 针对所有用户组允许的Limit DenyAll 针对所有用户禁止的Limit 关于限制速率的参数为: TransferRate STOR|RETR 速度(Kbytes/s) user 使用者 3.2.常用参数说明 ServerName #当使用者登入主机的时候,proftpd 会显示在 Client 端的 FTP 软件的一些基本讯息啦! ServerType #启动 proftpd 的方法,有两种方式,分别是 standalone与xinetd DefaultServer #预设的主机啊。这个项目可以设定为on或off,基本上,除非您有两个 IP 或者是设定了虚拟主机 (virtualhost), 否则这个项目都应该要设定为 on 才行!不然有些 uknown的联机会无法连接到您的 FTP 服务。 Port # 设定主机的 FTP 命令信道端口!FTP命令通道通常为 21 ,您也可以更改,不过,这个设定只有当ServerType 为 standalone 时才有效。 Umask # 与建立目录及档案的预设属性有关的设定喔!用 022 就够了! MaxInstances #同一时间允许的联机数目,这个设定项目与 process (PID) 有关!所以您的 FTP 主机中,proftpd 启用的 process 最多能有30个。这个与 MaxClients 不一样! User 与 Group #预设的服务启动者!后面接的使用者与群组必须在 /etc/passwd 与 /etc/group 里面存在方可! MaxHostsPerUser 1 "对不起,每个帐户最多允许来源ip为1个" #MaxHostsPerUser 对防止ftp帐号还是比较有用的。 MaxClientsPerUser 1 "对不起,每个帐户在每个客户端最多可以同时登陆1次" #这个参数可以防止多线程软件下载对服务器的破坏 MaxClientsPerHost 1 "对不起,同一个客户端只能最多1个帐号可以登陆" #比如ftp服务端有好多帐户你都有,但也只能用1个帐号登陆 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支持现在流行的passive传输方式,默认是不支持的。只要在服务端设置 AllowForeignAddress on PassivePorts 49152 65534 #端口也可自己指定喜欢的 千万别忘了在客户端也要设置成支持passive 如何让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的文件 重启一下,以后ftp1就可以启用上传/下载比率了 4.各种ftp的配置 4.1.本地用户 目标: 使用主机本地端时间,而不要使用 GMT 时间; 主机最多允许 50 条联机,且最多允许 100 个使用者上线,当超过 100 个使用者还有其它 FTP 要求时,就显示:很抱歉,上线人数额满了!; 同一个 IP (或主机) 来源最多仅能具有 5 个 FTP 服务; 允许续传; 被动式(passive mode)的端口为 65400 到 65420 这21个端口; 主机不允许 Root 登入; 想建立一个名为 badbird 的群组,在该群组内的所有使用者都无法离开自己的家目录(chroot); 在badbird 这个群组当中的 nogoodbird 这个使用者,该使用者能够使用 ftp 但是无法使用 ssh 连到主机; 在这个公开的目录 /home/ftp/pub 中,所有人均不可写入,只有读取的权限; # vi /usr/local/proftpd/etc/proftpd.conf # FTP主机的环境设定 ServerName "测试用的 Proftp 主机" ServerType standalone DefaultServer on Port 21 User nobody Group nobody #所谓的 GMT 时间就是格林威治时间,因为要使用本地时间,所以设为 off TimesGMT off # 最多仅有 50 条 prftpd 的 PID MaxInstances 50 # 最多允许 100 个使用者在在线 MaxClients 100 "很抱歉上线人数额满了" # 同一个主机最多可以同时 5 个 FTP 联机 MaxClientsPerHost 5 # 允许使用者续传!预设是 off AllowStoreRestart on # 后面接的是端口,最小到最大的端口共 21 个 PassivePorts 65400 65420 # 其它与实体用户较相关的设定值! Umask 022 # 不许 root 登入!预设就是 off RootLogin off # 这个设定可以让使用者不需要具有能够执行的 shell。例如让nogoodbird 这个具有 /bin/false 的使用者,依然可以使用 ftp RequireValidShell off # ~ 代表家目录。DefaultRoot后面接的是group,所以在这里badbird为group,而不是user # 这里特别容易搞混乱,请再特别的留意一下阿!只要不属于 badbird # 这个群组的 User 就可以离开自己的家目录了!(没有被 chroot ) DefaultRoot ~ badbird # 下面的设定中,在根目录内的所有目录均具有可擦写的权力,但是在 # /home/ftp/pub 这个目录中,不论 Linux 属性为何,使用者均无法写入! # 但是可以浏览以及下载喔!在我们这个设定当中, badbird 这个群组无法离开 # 自己的家目录,至于其它可以离开自己家目录的使用者,来到这个 # /home/ftp/pub 当中,也不具有写入的权限喔! AllowOverwrite on Denyall 建立nogoodbird用户,由于不具有 shell 所以不能 SSH 但可以 ftp # useradd -g badbird -m -s /bin/false nogoodbird # service proftpd restart 事实上,对于实体用户实在不需要限制的太多!要不然就不要开放,要不然就直接改成 sftp!此外,在上面这个设定当中,我们暂时拿掉了anonymous的登入,所以使用 anonymous 将无法登入。 4.2.匿名用户 目标: anonymous的根目录为 /var/ftp 这个目录; anonymous登入后取得的 PID 在 Linux 的权限为 ftp:ftp; 当anonymous登入 FTP 之后,在 Client 端的 FTP 软件显示一些欢迎讯息; 最多允许 30 个 anonymous 的登入; 限制上传/下载速度为 100Kbytes/s 与 50 Kbytes/s; 在 /var/ftp/ 里面,除了 /var/ftp/upload 之外,其它的目录均不可写入; 在 /var/ftp/upload 这个目录中,仅可以写入,不能下载,并且在使用者进入这个目录后,显示出一些相关的信息; 建立基本的设定档案: # vi /usr/local/proftpd/etc/proftpd.conf # 关于主机与实体用户的设定 ServerName "测试用的 Proftp 主机" ServerType standalone DefaultServer on Port 21 User nobody Group nobody TimesGMT off # 所谓的 GMT 时间就是格林威治时间,因为要使用本地时间,所以设为 off MaxInstances 50 # 最多仅有 50 条 prftpd 的 PID MaxClients 100 "很抱歉上线人数额满了" # 最多允许 100 个使用者在在线 MaxClientsPerHost 5 # 同一个主机最多可以同时 5 个 FTP 联机 AllowStoreRestart on # 允许使用者上传续传!预设是 off PassivePorts 65400 65420 # anonymous 的设定 # 底下为建立 Anonymous 在 Linux 系统下的 PID 权限拥有者 User ftp Group ftp UserAlias anonymous ftp UserAlias nogoodbird ftp # 建立显示的讯息给 anonymous 观察用的! DisplayLogin welcome.msg DisplayFirstChdir .message MaxClients 30 "匿名登入者联机数已经饱和了!" # 这个就重要啦!用来限制传输速率的吶!基本语法为: # TransferRate (STOR|RETR) 速度(Kbytes/s) user 使用者 # STOR 为上传而 RETR 为下载的意思!速度为 Kbytes/second 喔! TransferRate STOR 100 user anonymous,ftp # 单位为 KBytes/second TransferRate RETR 50 user anonymous,ftp Denyall # 底下这个则仅与 upload 这个目录以及其下的子目录有关而已! Denyall Allowall 建立欢迎画面: 注意:如果anonymous 根目录在 /var/ftp,welcome.msg 就必须放置在/var/ftp/welcome.msg # vi /var/ftp/welcome.msg 欢迎光临!这个是测试 FTP 站点! 我的主机: %L 目前时间: %T 最大联机: %M 目前联机: %N 您的主机: %R 您的账号: %U 目前目录: %C 建立特殊注意事项: 需要在 /var/ftp/upload 里面建立一个特殊讯息 # vi /var/ftp/upload/.message 这个目录仅能上传不能下载, 您的身份为anonymous! 建立 upload 的权限: # chown ftp:ftp /var/ftp/upload # chmod 755 /var/ftp/upload 重新启动! # service proftpd restart 4.3.特殊交流用户 (建立一个 ftpguest 群组!将所有的 guset 设定在这个群组内!) 一些用户具有上传与下载的权限,并且这些权限是可以保留或者是累积的,在 Windows 系统上面有 Server-U 这个好用的�� /horts |