我们知道在 Internet 上面有个很快速的档案传输协议,就是 FTP !而且也知道最古老的 FTP 服务器软件之一就是那个很出名的 Wu FTP 啰!但是,虽然 Wu FTP 的速度快、架设方便,不过由于招牌老且大,所以『深受怪客 ( Cracker ) 的喜好』啊!导致 Wu FTP 的安全性堪虑~此外, Wu FTP 受限于他的架构问题,所以一些在 Win32 上面执行的 FTP 功能 ( 例如很出名的 Server-U ) 在 Wu FTP 上面都没有办法很简易的就达成这样的功用!为了改善安全上面的疑虑以及增强 FTP 软件的设定便利性,所以就有这个 Professional FTP daemon (proftpd) 的产生啦!这个 proftpd 并非用来与 Wu FTP 打对台的,但是由于他的设定弹性太高了!所以渐渐的大家都倾向于使用这个 FTP 软件来架设自己的 Linux 服务器呢!呵呵!如果你是使用 Wu FTP 的使用者,也可以尝试以这个 proftpd 来取代 Wu FTP 喔!应该会更安全的啦!而,如果您习惯使用 Server-U 来设定特殊账号的上传/下载数据的话,呵呵!那么 proftpd 就是您转换跑道的首选了! |
1. 将刚刚下载的
proftpd 解压缩:
[root@tet root]# wget \ > http://ftp.nsysu.edu.tw/Unix/FTP/proftpd/distrib/source/proftpd-1.2.8.tar.gz [root@test root]# cd /usr/local/src [root@test src]# tar -zxvf /root/proftpd-1.2.8.tar.gz # ...(略)...会主动产生 proftpd-1.2.8 的目录 [root@test src]# cd proftpd-1.2.8 # 在这个目录底下的 INSTALL 请详细的阅读,里面有安装的几个重要信息! 2. 进行编译前的参数设定: [root@test proftpd-1.2.8]# ./configure --prefix=/usr/local/proftpd \ > --enable-shadow --enable-autoshadow \ > --with-modules=mod_ratio:mod_readme:mod_wrap # 请注意,那个 prefix 表示我预计要安装 proftpd 的目录; # 至于 --enable-shadow 与 --enable-autoshadow 则是预计要以 # 系统的 /etc/shadow 做为我的 FTP 登入时的密码验证档案! # 此外,还加入许多的支持模块,会让我们的 Proftpd 变的更活泼! [root@test proftpd-1.2.8]# make && make install # 经过这个步骤之后,你的 proftpd 就会安装在 /usr/local/proftpd 之内, # 其中,设定档在 /usr/local/proftpd/etc/proftpd.conf ! # 至于说明档 (man pages)则在 /usr/local/proftpd/man 当中! 3. 设定一些查询的相关功能! [root@test proftpd-1.2.8]# vi /etc/man.config # 加入底下这一行,这样才能以 man 来查询指令的用法! MANPATH /usr/local/proftpd/man |
[root@test
root]# vi /etc/xinetd.d/proftpd
service ftp { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/local/proftpd/sbin/proftpd server_args = -c /usr/local/proftpd/etc/proftpd.conf log_on_success += DURATION USERID log_on_failure += USERID } # 上面的重点在于两行粗体字的地方!尤其是 server =.. 那一行! # 由于我们是使用 Tarball 安装的,自然就以我们的档案放置目录为主, # 如果您使用 RPM 安装,这里就不太相同啰! # 另外,那个 server_args 后面接的则是设定档的档名咯! [root@test root]# vi /usr/local/proftpd/etc/proftpd.conf # 找到底下这个设定值: ServerType standalone Group nogroup # 因为我们的系统预设并没有 nogroup 这个群组,所以必须要将他改成 # 系统里面有的群组才行吶!而服务器启动的方式有 super daemon 与 # stand alone ,所以: ServerType inetd Group nobody [root@test root]# /etc/rc.d/init.d/xinetd restart [root@test root]# netstat -tlnp tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 8483/xinetd # 呵呵! 21 这个埠口出现了!理论上没有问题,不过还是需要分析一下 # /var/log/messages 这个档案的内容才行喔! |
[root@test
root]# proftpd -c 设定档档名
[root@test root]# proftpd -c /usr/local/proftpd/etc/proftpd.conf |
[root@test
root]# ftpshut [-l 分钟] -d [分钟] 时间 "讯息"
参数说明: -l :在 FTP 服务器关闭服务之前的多少分钟,尝试建立新的 FTP 联机者均不被接受 -d :在 FTP 服务器关闭服务之前的多少分钟,以建立的 FTP 联机将强制被终止 时间:在什么时候或多少分钟后, FTP 服务器将关闭 FTP 服务!格式有两种: +number :再经过 number 分钟后 FTP 会关闭 MMHH :在今天的 MM:HH 时间 FTP 会关闭 讯息:显示给 user 看的信息! 范例: 范例一: # 再经过 180 分钟后,FTP 会关机,且关机前 20 分钟即不可再接受新联机, # 而以建立的联机在关机前 10 分钟强制断线,并在 client 端显示: # FTP will shutdown at time [root@test root]# ftpshut -l 20 -d 10 +180 "This FTP will shutdown at time" |
[root@test
root]# ftpwho
standalone FTP daemon [8451]: 10194 badbird [ 0m11s] 0m6s (idle) Service class - 1 user # 如上所示,目前有一个使用者,名为 badbird 的账号,在使用 proftpd 喔! |
# 关于主机相关的设定
设定项目一 参数内容 设定参数二 参数内容 # 关于某些目录的权限设定 <Directory "完整目录名称"> ... ... ... </Directory> # 关于 Anonymous 的目录与权限设定 <Anonymous "匿名登入时候的匿名者根目录"> ... ... <Limit 一些动作> ... ... </Limit> </Anonymous> |
%T 目前的时间
%F 所在硬盘剩下的容量 %C 目前所在的目录 %R Client 端的主机名称 %L Server 端的主机名称 %U 使用者账号名称 %M 最大允许联机人数 %N 目前的主机联机人数 %E FTP 主机管理员的 email %i 本次上传的档案数目 %o 本次下载的档案数量 %t 本次上传+下载的档案数量 |
[root@test
root]# vi /usr/local/proftpd/etc/proftpd.conf
# 底下是 FTP 主机的环境设定,每个项目的内容为: # ServerName :当使用者登入主机的时候,proftpd 会显示在 Client 端 # 的 FTP 软件的一些基本讯息啦! # ServerType :启动 proftpd 的方法,有两种方式,分别是 standalone # 与 inetd ,因为我们是以 super daemon 启动的,所以 # 设定为 inetd 喔!如果您想独立启动(不透过 xinetd ) # 就需要设定为 standalone 了 # DefaultServer:预设的主机啊!这个项目可以设定为 on 或 off ,基本上, # 除非您有两个 IP 或者是设定了虚拟主机 (virtualhost), # 否则这个项目都应该要设定为 on 才行!不然有些 uknown # 的联机会无法连接到您的 FTP 服务喔! # Port :设定主机的 FTP 命令通道端口口!如前面 Wu FTP 所说明的,FTP # 命令通道通常为 21 ,您也可以更改,不过,这个设定只有当 # ServerType 为 standalone 时才有效!若为 inetd 则与 xientd 及 # /etc/services 有关那!请前往参考 wu FTP 的修改 port 设定! # Umask :与建立目录及档案的预设属性有关的设定喔!用 022 就够了! # MaxInstances:同一时间允许的联机数目,这个设定项目与 process (PID) 有关! # 所以您的 FTP 主机中,proftpd 启用的 process 最多能有30个 # 这个与 MaxClients 不一样喔! # User 与 Group:proftpd 预设的服务启动者!后面接的使用者与群组 # 必须在 /etc/passwd 与 /etc/group 里面存在方可! ServerName "这个是鸟哥的测试用的 Proftp 主机" ServerType inetd DefaultServer on Port 21 Umask 022 MaxInstances 30 User nobody Group nobody # 底下则是与目录有关的设定!在这个设定中,显示允许读写与覆盖档案! # AllowOverwrite 就是允许覆写的意思! <Directory /> AllowOverwrite on </Directory> # 底下与匿名登入者有关!由 <anonymous ~ftp> 显示:『预设的匿名登入之 # 根目录为 ftp 这个使用者的家目录!』,因为 ~ 代表家目录的意思! # 而且,匿名登入主机后,该 process 取得的 user:group 权限为 ftp:ftp! # 至于那个 UserAlias 就是在设定『名字的别名』啊!语法为: # UserAlias "登入者的账号" "实际 Linux 主机的账号" # MaxClients:最多仅允许 10 个 anonymous 登入我们主机的意思! # DisplayLogin:当使用者登入之后的欢迎画面的档案内容! # DisplayFirstChdir:转换到某目录时(cd指令),显示该目录的注意事项档案内容 <Anonymous ~ftp> User ftp Group ftp UserAlias anonymous ftp MaxClients 10 DisplayLogin welcome.msg DisplayFirstChdir .message # 底下则是限制 anonymous 『不具有写入的权限!』因为 WRITE 是写入, # 加上 DenyAll 则是写入的权限被取消之意! <Limit WRITE> DenyAll </Limit> </Anonymous> |
[root@test
root]# vi /usr/local/proftpd/etc/proftpd.conf
# 底下是 FTP 主机的环境设定: ServerName "这个是鸟哥的测试用的 Proftp 主机" ServerType inetd DefaultServer on Port 21 User nobody Group nobody TimesGMT off # 所谓的 GMT 时间就是格林威治时间, # 详细的时区观念请参考后续的NTP服务器 # 因为要使用本地时间,所以设为 off ! MaxInstances 50 # 最多仅有 50 条 prftpd 的 PID MaxClients 100 "很抱歉上线人数额满了" # 最多允许 100 个使用者在在线 MaxClientsPerHost 5 # 同一个主机最多可以同时 5 个 FTP 联机 AllowStoreRestart on # 允许使用者上传续传!预设是 off PassivePorts 65400 65420 # 后面接的是埠口,最小到最大的埠口共 21 个! # 其它与实体用户较相关的设定值! Umask 022 RootLogin off # 不许 root 登入!预设就是 off RequireValidShell off # 这个设定可以让使用者不需要具有『能够执行的 shell 』!例如让 # nogoodbird 这个具有 /bin/false 的使用者,依然可以使用 ftp 喔! DefaultRoot ~ badbird # 注意啊!那个 ~ 代表家目录的意思喔!特别特别留意! DefaultRoot # 后面接的是『群组』喔!所以在这里 badbird 为群组,而不是使用者喔! # 这里特别容易搞混乱,请再特别的留意一下阿!只要不属于 badbird # 这个群组的 User 就可以离开自己的家目录了!(没有被 chroot ) ^_^ <Directory /> AllowOverwrite on </Directory> <Directory /home/ftp/pub> <Limit WRITE> Denyall </Limit> </Directory> # 上面的设定中,在根目录内的所有目录均具有可擦写的权力,但是在 # /home/ftp/pub 这个目录中,不论 Linux 属性为何,使用者均无法写入! # 但是可以浏览以及下载喔!在我们这个设定当中, badbird 这个群组无法离开 # 自己的家目录,至于其它可以离开自己家目录的使用者,来到这个 # /home/ftp/pub 当中,也不具有写入的权限喔! [root@test root]# useradd -g badbird -m -s /bin/false nogoodbird # 建立这个 nogoodbird 由于不具有 shell 所以不能 SSH 但可以 ftp 喔! [root@test root]# /etc/rc.d/init.d/xinetd restart |
1. 建立基本的设定档案:
[root@test root]# vi /usr/local/proftpd/etc/proftpd.conf # 关于主机与实体用户的设定如同前一小节所示,所以我这里就略过了! ...(沿用上一小节的设定,这里略过)..... # 底下则是 anonymous 的设定喔! <Anonymous /var/ftp> # 底下为建立 Anonymous 在 Linux 系统下的 PID 权限拥有者! # 此外,使用 UserAlias 将 nogoodbird 降级为 anonymous 的账号! 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 <Limit WRITE> Denyall </Limit> # 底下这个则仅与 upload 这个目录以及其下的子目录有关而已! <Directory /var/ftp/upload/*> <Limit READ> Denyall </Limit> <Limit WRITE> Allowall </Limit> </Directory> </Anonymous> 2. 建立欢迎画面: # 特别留意,因为我的 anonymous 根目录在 /var/ftp ,因此,我的 # welcome.msg 就必须放置在 /var/ftp/welcome.msg 了! [root@test root]# vi /var/ftp/welcome.msg 欢迎光临!这个是鸟哥的测试 FTP 站台喔! 我的主机: %L 目前时间: %T 最大联机: %M 目前联机: %N 您的主机: %R 您的账号: %U 目前目录: %C 3. 建立特殊注意事项: # 刚刚提到,需要在 /var/ftp/upload 里面建立一个特殊讯息! [root@test root]# vi /var/ftp/upload/.message 这个目录仅能上传不能下载; 您的身份为 anonymous 喔! 4. 建立 upload 的权限: [root@test root]# chown ftp:ftp /var/ftp/upload [root@test root]# chmod 755 /var/ftp/upload 5. 重新启动! [root@test root]# /etc/rc.d/init.d/xinetd restart |
1. 建立所需要的群组与使用者:
# 我要建立一个群组为 ftpguest ,此外,所有相关的使用者都是这个群组! [root@test root]# groupadd ftpguest [root@test root]# useradd -M -g ftpguest -s /bin/false ftpuser1 [root@test root]# useradd -M -g ftpguest -s /bin/false ftpuser2 [root@test root]# useradd -M -g ftpguest -s /bin/false ftpuser3 [root@test root]# passwd ftpuser1 # 请依序建立 ftpuser1 ftpuser2 ftpuser3 的密码! 2. 建立所需要的 FTP 相关路径: # 我要的路径在 /var/ftp2 当中,而且 ftpguest 必须要能够写入! [root@test root]# mkdir -p /var/ftp2 [root@test root]# mkdir -p /var/ftp2/upload [root@test root]# mkdir -p /var/ftp2/work [root@test root]# chmod -R 775 /var/ftp2 [root@test root]# touch /var/ftp2/work/ratio.dat #底下两个档案用在 ratio [root@test root]# touch /var/ftp2/work/ratio.tmp [root@test root]# chown -R ftpuser1:ftpguest /var/ftp2 [root@test root]# chmod 666 /var/ftp2/work/* 3. 建立基本的设定档案:
<Directory
/var/ftp2/upload/*>
|
[root@test
ftp2]# ftp localhost
Connected to localhost (127.0.0.1). 220 ProFTPD 1.2.8 Server (这个是鸟哥的测试用的 Proftp 主机) [test.localhost] Name (localhost:root): ftpuser1 331 Password required for ftpuser1. Password: <== 这里输入 ftpuser1 的密码 230-欢迎光临!这个是鸟哥的测试 FTP 站台喔! 我的主机: test.localhost 目前时间: Fri Sep 5 01:08:10 2003 最大联机: 100 目前联机: 1 您的主机: localhost.localdomain 您的账号: ftpuser1 目前目录: / 230-User ftpuser1 logged in. 230 Down: 0 Files (0mb) Up: 0 Files (0mb) 1:2B CR: 97 Remote system type is UNIX. Using binary mode to transfer files. ftp> bye |
[root@test
ftp2]# vi /var/ftp2/work/ratio.dat
ftpuser1|0|0|0|0 # 这个档案的格式为:(注:以符号『|』隔开各个字段) # 账号|上传档案数|上传档案总量(KBytes)|下载档案数|下载档案总量(KBytes) |
Client 端并没有什么好设定的地方,主要就是 ftp 的使用了,请参考 wu FTP 主机设定一节!