Linux下搭建Ftp服务器.docx
《Linux下搭建Ftp服务器.docx》由会员分享,可在线阅读,更多相关《Linux下搭建Ftp服务器.docx(10页珍藏版)》请在冰豆网上搜索。
Linux下搭建Ftp服务器
概述
使用文件传输协议(FTP)来通过网络在计算机之间传输文件是很普遍的一种方法。
几乎在所有的平台上面都有FTP的客户端和服务端的软件,因此用FTP来传送文件也是很方便的一个方法。
有很多配置FTP服务器的不同方法。
其中一种是把FTP配置成只对系统中的用户开放的私有服务器,这也是FTP的默认配置。
一个私有的FTP服务器只运行系统中的用户访问,而且可以对用户进行访问控制,这样可以给予或拒绝特定用户的访问权限。
另一种是把FTP服务器配置成匿名服务器。
匿名FTP服务器允许任何人(不管有没有帐号)访问服务器并传输文件。
因为可能存在潜在的安全问题,必须小心配置使得只允许访问系统中特定的目录。
在这一节里,我们把FTP配置成“chrooted”的方式,这种配置运行用户访问,例如:
Web站点的目录,但是不允许他们访问更高一层的目录。
注意事项
下面所有的命令都是Unix兼容的命令。
源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。
安装在RedHatLinux6.1下测试通过。
要用“root”用户进行安装。
wu-ftp的版本号是2.6.0。
编译和安装
把软件包(tar.gz)解压缩:
[root@deep]#cpwu-ftpd-version.tar.gz/var/tmp
[root@deep]#cd/var/tmp
[root@deep]#tarxzpfwu-ftpd-version.tar.gz
编译和优化
转到wu-ftpd的新目录下,运行下面的命令:
编辑“ftpcount.c”文件(vi+241src/ftpcount.c),改变下面这一行:
#ifdefined(LINUX)
改为:
#ifdefined(LINUX_BUT_NOT_REDHAT_6_0)
编辑“pathnames.h.in”文件(vi+42src/pathnames.h.in),改变下面这一行:
#define_PATH_EXECPATH"/bin/ftp-exec"
改为:
#define_PATH_EXECPATH"/usr/bin/ftp-exec"
我们把“ftp-exec”从“/bin”目录改到“/usr/bin”目录下。
message
“message”设置当用户登录或转到一个目录的时候会收到什么消息。
可以设定多个消息。
命令的格式为:
message<path><when>
<path>表示需要显示的文件的完整路径名,<when>和“readme”中的<when>意思一样。
还需要注意的是消息文件的路径名也是相对于匿名ftp目录的。
例如:
message/home/ftp/.welcome.msgLOGIN
compress、tar、chmod、delete、overwrite、rename
如果这些都不设置,那么就使用默认值,也就是对所有人都是“yes”。
下面例子中的设置的意思是给guest组chmod、delete、overwrite和rename文件的权力,所有人都可以使用compress和tar。
例如:
compressyesall
taryesall
chmodyesguest
deleteyesguest
overwriteyesguest
renameyesguest
logcommands
因为安全上的原因需要记录用户使用的每一个命令。
“logcommands”的格式是:
logcommands<typelist>
<typelist>是用逗号隔开的字串,表示哪些用户的命令需要记录下来,字串的取值可以是:
anonymous、guest或real。
例如:
要记录real和guest用户的每一个命令,可以这么表示:
logcommandsreal,guest
这些记录都保存在“/var/log/message”文件中。
logtransfers
因为安全文件需要把文件的传输都记录下来。
“logtransfers”的格式是:
logtransfers<typelist><directions>
<typelist>是用逗号隔开的字串,表示哪些用户的命令需要记录下来,字串的取值可以是:
anonymous、guest或real。
<direction>也是用逗号隔开的字串,设置需要记录的文件传输的方向,可以选择的两个传输方向是“inbound”(向内)和“outbound”(向外)。
[page]
例如,用下面表示记录所有real和guest用户的“inbound”和“outbound”方向的文件传输:
logtransfersreal,guestinbound,outbound
这些记录保存在“/var/log/xferlog”文件中。
guestgroup
这个命令用来设置guest组,每一行只能有一个成员。
例如:
guestgroupftpadmin
guestgroupwebmaster
logsecurity
用来设置记录real、guest或anonymous用户违反安全规则的行为。
logsecurity<typelist>
<typelist>是用逗号隔开的字串,字串的取值可以是:
anonymous、guest或real。
“real”表示真正在ftp服务器上有帐号的用户,“anonymous”表示匿名用户,“guest”表示guest用户。
例如:
logsecurityreal,guest
restricted-uid、restricted-gid、guest-root
这些用来设置是否允许real和guest用户访问家目录之外的目录。
格式为:
guest-root<root-dir>
restricted-uid<uid-range>
restricted-gid<gid-range>
例如:
guest-root/home/ftpftpadminwebmaster
restricted-uidftpadminwebmaster
restricted-gidadminftpwebmaster
<root-dir>设置chroot环境的用户路径。
在一行里可以有多个uid地范围。
如果为用户设置了guest-root,那么该用户的家目录就在“<root-dir>/etc/passwd”文件中设定,而“/etc/passwd”文件中的设定是无效的。
当“ftpadmin”和“webmaster”被改变了根目录(chrooted)到“/home/ftp”目录下,他们就被限制在各自的家目录下而不能访问别人的文件。
greeting
设置用户登录时候的欢迎信息。
格式为:
greetingfull|brief|terse
“greetingfull”是默认的设置显示主机名和ftpdaemon地版本,“greetingbrief”显示主机名,“greetingterse”简单地显示“FTPserverready”。
例如:
greetingterse
keepalive<yes|no>
设置socket的TCPSO_KEEPALIVE参数。
这样在必要的时候可以断开网络连接。
“yes”有效,“no”无效。
最好设成“yes”:
Keepaliveyes
[page]
配置“/etc/ftphosts”文件
“/etc/ftphosts”文件为每一个用户建立规则,指定允许用户从某个主机登录ftp服务器,或者不允许用户从某个主机登录ftp服务器。
创建“ftphosts”文件(touch/etc/ftphosts),加入下面这几行:
#Examplehostaccessfile
#
#Everythingaftera‘#‘istreatedascomment,
#emptylinesareignored
allowftpadmin208.164.186.1208.164.186.2208.164.186.4
把文件的权限改为600:
[root@deep]#chmod600/etc/ftphosts
每一行可能是:
allow<username><addrglob>
或
deny<username><addrglob>
“allow”允许用户用<username>用户名,从<addrglob>地址访问ftp服务器。
<addrglob>可以包含多个地址。
“deny”禁止用户名为<username>的用户,从<addrglob>地址访问ftp服务器。
<addrglob>可以包含多个地址。
配置“/etc/ftpusers”文件
“/etc/ftpusers”文件设置哪些用户不允许连接到ftp服务器。
创建“ftpusers”文件(touch/etc/ftpusers),加入下面这几行:
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
把文件的权限设成600:
[root@deep]#chmod600/etc/ftpusers
配置“/etc/ftpconversions”文件
“/etc/ftpconversions”是用来控制当传输文件的时候是否进行压缩。
创建“ftpconversions”文件(touch/etc/ftpconversions),在文件中加入:
:
.Z:
:
:
/bin/compress-d-c%s:
T_REG|T_ASCII:
O_UNCOMPRESS:
UNCOMPRESS
:
:
:
.Z:
/bin/compress-c%s:
T_REG:
O_COMPRESS:
COMPRESS
:
.gz:
:
:
/bin/gzip-cd%s:
T_REG|T_ASCII:
O_UNCOMPRESS:
GUNZIP
:
:
:
.gz:
/bin/gzip-9-c%s:
T_REG:
O_COMPRESS:
GZIP
:
:
:
.tar:
/bin/tar-c-f-%s:
T_REG|T_DIR:
O_TAR:
TAR
:
:
:
.tar.Z:
/bin/tar-c-Z-f-%s:
T_REG|T_DIR:
O_COMPRESS|O_TAR:
TAR+COMPRESS
:
:
:
.tar.gz:
/bin/tar-c-z-f-%s:
T_REG|T_DIR:
O_COMPRESS|O_TAR:
TAR+GZIP
:
:
:
.crc:
/bin/cksum%s:
T_REG:
:
CKSUM
:
:
:
.md5:
/bin/md5sum%s:
T_REG:
:
MD5SUM
把文件的属性改为600:
[root@deep]#chmod600/etc/ftpconversions
配置“/etc/pam.d/ft