出处:鸟哥的 Linux 新手讨论区
http://phorum.....org这是我跟同学一起整理的ftp教学
有错ㄉ话请指正喔!!!...^^
10-0 FTP SERVER摘要
FTP(File Transfer Protocol)档案传输协定,是目前Internet最常被用来传输档案的方法,它可以提供使用者上传或下载档案。由于FTP伺服器的服务功能相当好用,所以Linux在安装光碟中就有WU-FTP Server,另外还有相当好用的PROFTP Server可在网路上下载供使用者安装,使用者可在Linux文字模式下直接以ftp指令连接伺服器。
FTP伺服器除了提供拥有专属帐号的使用者连接外,更提供了匿名式的档案下载服务,使用者只要在帐号中填入anonymous,密码则键入电子邮件地址,就能以匿名方式登入FTP伺服器来上传或下载档案,这也是FTP通讯协定得以盛行的原因之一。
10-1 WU-FTP 简介
WU-FTPD 为 Washington Univ. in Saint Louis 所写的FTP server程式。除了它原有 ftp server 的功能,主要地也增加了下列数项功能︰
1.可将使用者区分成不同的class,给予一些权限上的限制。
2.记录 (log) 使用者所下的命令及传送档案的名称。
3.可对不同网域做不同存取权限和可存取的时段。
4.提供user在下载档案的时,可自动压缩或解压。
5.可记录FTP Server使用情形。
6.可限定最多连线人数,以符合整体运作效能。
7.显示相关讯息,让使用者了解接收状态。
8.可将FTP Server暂停,便于系统维护。
9.支援虚拟FTP主机(Virtual FTP Servers)。
10-2 WU-FTP 安装与启动
WU-FTP的安装套件在Linux的安装光碟就有,在安装Linux系统时选取即可安装WU-FTP。若是当初安装系统时没有安装WU-FTP,则可经由下列的方式安装。
[root@linux root]# mount /mnt/cdrom 将光碟机挂入/mnt/cdrom
[root@linux root]# cd /mnt/cdrom/RedHat/RPMS 切换到放置RPM档案的目录
[root@linux root]# rpm –ivh wu-ftpd-2.6.1-18.i386.rpm
如要从旧版升级至新版,请将参数-i改成-U即可
[root@linux root]# /etc/rc.d/init.d/xinetd reload 启动FTP
要确认 FTP伺服器是否已启动可利用telnet指令来测试:
WU-FTP Ver. 2.6.1-18有安全漏洞,可以让hacker读取Server上所有文件。必须升级至Ver. 2.6.1-20以修正漏洞。我们可以在http://www.redhat.com/apps/support/errata下载修正程式,执行
rpm –Fvh wu-ftpd-2.6.1-20.i386.rpm
安装完成后修改/etc/xinetd.d/wu-ftpd档,将disable设为no
service ftp{
disable = no ←改为no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
}
存档后,要求xinetd重新读取设定档
[root@linux root]# /etc/rc.d/init.d/xinetd reload
经过以上步骤,WU-FTP安装启动完成。
10-3 WU-FTP 设定
设定档/etc/ftpaccess
l 拒绝登入的Unix使用者与UID
deny-uid <使用者ID>
l 拒绝登入的Unix群组与GID
deny-gid <群组ID>
l 不拒绝的Unix使用者与UID
allow-uid <使用者ID>
l 不拒绝的Unix群组与GID
allow-gid <群组ID>
l 当作访客Unix使用者与UID
guestuser <使用者ID>
l 当作访客Unix群组与GID
guestgroup <群组ID>
l 允许登入时帐号或密码输入错误的次数,这个值设越小越好,以避免被hacker攻击
loginfails 3
登入成功后显示欢迎讯息
message <讯息档> login
例如我们编写一个讯息内容如下:
////////////////////////////////////////////////////////////////////////// WELCOME TO FTP site !!!
请大家多分享好用的软体----^_^---thx!!/////////////////////////////////////////////////////////////////////////
你的来源IP是 %R
您是目前站上第 %N 位使用者
系统时间是: %T
主目录为: %C
将此内容存成welcome.msg放在根目录下,设定欢迎讯息
message /welcome.msg login
则登入成功后会显示欢迎讯息
讯息档中使用的参数:
%T FTP Server系统的时间
%C 目前所在目录名称
%E 管理员的E-Mail
%R FTP Client的主机名称
%L FTP Server的主机名称
%U Client登入的帐号
%M 最大连线人数
%N 目前连线人数
l上传设定
upload /var/ftp/guestftp /upload yes guest guest dirs
说明:/var/ftp/guestftp FTP 所在目录
/upload 上传目录
Yes 允许上传
guest guest owner group
dirs 允许建立目录
密码检查
passwd-check <none|trivial|rfc822> <enforce|warn>
检查方式:
none 不检查密码
trivial 密码中需有”@”
rfc822 要符合rfc822规定
回应:
enforce 中断与client的连线
warn 显示警告讯息
l 匿名FTP根目录
anonymous-root <目录>
l 访客根目录
guest-root <目录>
l 限制 user 只能在 /home 目录下活动
guest-root <FTP目录>
restricted-uid
l 拒绝某IP或DomainName进入
deny <IP> <讯息档>
ex: deny *.*.edu.tw /msgdeny
deny 140.92.0.0/16 /msgdeny
l利用real, guest, anonymous三种身分与client来源IP/HostName来定义群组,以便于管理。
class <class> <typelist> <addrglob>
ex: class admin real *.pccu.edu.tw
class local real, guest, anonymous *.pccu.edu.tw
class remote real, guest, anonymous
l 纪录档
log commands <类别>
ex: log command real,anonymous
将类别为real与anonymous的连线时所下的指令,纪录到纪录档去。
log transfers <类别> <directions>
ex: log transfers real inbound,outbound
将类别为real的连线所下载/上传的档案全部纪录到纪录档去。
l 限定某个类别在某时间的最大登入人数
limit <类别> <n> <times> <讯息档>
ex: limit local 100 Any1800-0100 /msgtoomany
l 对类别设定其对于可否使用chmod, delete, overwrite, rename, umask等权限
chmod <yes|no> <类别>
delete <yes|no> <类别>
overwrite <yes|no> <类别>
rename <yes|no> <类别>
umask <yes|no> <类别>
ex: chmod yes class=admin
delete no anonymous, real
overwrote no class=remote
设定档/etc/ftphost
l 允许某使用者从某个IP登入
allow <使用者ID> <IP>
ex: allow John 140.137.161.86
l 不允许某使用者从某个IP登入
deny <使用者ID> <IP>
ex: deny Mary 140.137.161.80
其他管理指令:
ftpwho :查阅目前登入FTP_Server的使用者。
ftpcount:计算目前登入的人数。
ftpshut :关闭FTP_Server。单纯关闭ftp,当该Server同时提供其他服务时,可以选择仅关避FTP SERVER,以保留其他服务。
ftpshut:<-l 分钟><-d 分钟><绝对时间><警告讯息>
10-4 ProFTP简介
目前大多数站台的 FTP 服务,以采用 WU-FTPD 伺服器程式架设者居多,而且WU-FTPD 在效能上,一直有不错的表现,程式版本更新的速度也不慢,不过,它却不是一个够安全的系统。
如果想找一个不错的 FTP 伺服程式来取代 WU-FTPD, ProFTPD是另一个不错得选择!ProFTPD 的发展,一开始,便是定位在:成为一个安全且容易设定的 FTP 伺服器程式。
以下是 ProFTPD 的特点:
· 单一设定档,设定风格接近 Apache 设定档
· 每一目录可用 .ftpaccess 来控制(类似 Apache 的 .htaccess)
· 易于设定多重虚拟主机以及匿名FTP
· 可让管理人员选择 standalone 或 inetd 的执行方式
· 匿名FTP不需要额外的目录结构
· 原始码开放,没有 SITE EXEC 指令,安全性可受监控
· 根据系统档案权限,可隐藏目录或档案
· 以较低权限的身份来执行,降低万一被攻入的危险
· 记录档支援 utmp/wtmp,并和 wu-ftpd 相容,记录格式也可扩充
支援 shadow password
10-5 开始安装
1.以proftpd-1.2.4.tar.gz安装为范例
步骤:
[root@linux root]#tar –zxvf proftpd-1.2.4.tar.gz
[root@linux proftpd-1.2.4]#cd proftpd-1.2.4
[root@linux proftpd-1.2.4]#./configure 执行组态设定档make
[root@linux proftpd-1.2.4]#make install
2. ProFTPD 设定档的位罝
用 RPM 档安装的 ProFTPD 设定档在 /etc/proftpd.conf
若抓 tar.gz 档回来安装的,则设定档在 /usr/local/etc/proftpd.conf
.
3. 启动ProFTP
ProFTP启动方式有两种,一种是standalone,另一种则为inetd,若此Server为专门之FTP则建议采用Standalone方式启动,若还有其他服务则建议采inetd启动其效能较佳。
以下为inetd方式作为范例:
修改 /usr/local/etc/proftpd.conf
ServerType inetd
在 /etc/xinedtd.d/ 下建立 proftpd 档,内容为 :
Service ftp {
disable = no ←预设为 yes,请改为 no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/proftpd
}
10-6 proftpd.conf 的设定范例:
# ServerName : 设定您的站台名称 (”# ”号为注解)
ServerName "MY FTP SITE"
# ServerType : 设定 ProFTPD 的执行方式,可以是 standalone 或 inetd
# 此处是 inetd
ServerType inetd
# DefaultServer 用来设定 unknown 的连接是否由预设的主机来处理
DefaultServer on
# Port 21 是 FTP 标准的通道,inetd启动的话无法变更port
Port 21
# 档案安全滤网值设为022
Umask 022
# 可避免 Dos 攻击的设定
MaxInstances 30
# 执行时的身份/组别权限
User nobody
Group nobody
#设定档案能被覆写.
<Directory /*>
AllowOverwrite on
</Directory>
#针对特定目录设定存取的限制,如上传目录
<Directory uploads/*>
#予许来源读取
<Limt READ>
#Deny All
Allow All
</Limit>
#允许来源储存、建立目录
<Limit STOR MKD>
Allow All
</Limit>
</Directory>
# 以下是匿名 FTP 的设定
<Anonymous ~ftp>
User ftp
Group ftp
AnonRequirePassword off
RequireValidShell off
#将用ftp身份登入的user权限设为等同anonymous
UserAlias anonymous ftp
# 设定匿名最大连线人数
MaxClients 10
#当使用者登入时显示欢迎讯息 , welcome.mag为欢迎讯息档名
#DisplayFirstChdir 是当切换目录时的提示讯息
DisplayLogin welcome.msg
DisplayFirstChdir .message
#限制匿名使用者是有能写入资料,此处设为不允许, Allow all 为允许
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
存档之后,重新启动 inetd :
/etc/rc.d/init.d/inet restart
10-7其他设定
设定一般user登入与否:
<Limit Login>
AllowAll 若不允许为 DenyAll </Limit>
设定一般user登入时的home目录:
DefaultRoot <目录位置>
若要设定根目录为自已的home目录:让使用者无法切换到别人的home目录
DefaultRoot ~
设定支援续传:
AllowStoreRestart on
#若想使用Root身份登入,请加上:
RootLogin On
隐藏版本讯息:
ServerIdent On “”
设定一个IP的登入个数:
MaxClientsPerHost 1
设定Log档的位置和档名:
TransferLog <目录位置><档名>
匿名FTP来源限制:
<Limit Login>
Order Deny,Allow
Deny from .evil.net , .otherevil.net
Allow from all
</Limit>
若发现使用 CuteFtp 等软体连上FTP时,无法改变档案属性,在proftpd.conf加入
AllowChmod true
隐藏某Group/User的档案:
HideUser <使用者> / HideGroup <群组>
若设定完仍无法使用匿名登入,请确定在匿名使用者中,有加入:
RequireValidShell off