一个小而巧的 FTP 服务器软件
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 主机设置一节!