当前位置:首页 > 服务器类 > Linux服务器 > > 在FreeBSD6.0中设定FTP服务器

在FreeBSD6.0中设定FTP服务器

点击次数:28 次 发布日期:2008-11-22 09:40:34 作者:源代码网
源代码网推荐

启动FTP服务器
我们有二种方式启动ftpd,一种是使用standalonedaemon,另一种是使用inetd。inetd是UNIX系统中一个强大的「超级服务器」,我们可以使用它来管理许多系统服务,例如telnet、ssh、ftp等。大部份的系统服务都是使用inetd来启动,使用它的好处在于可以统一管理各种服务,并经由它来设定服务规则,例如是否要阻挡某些IP来源等。不过,使用inetd的方式缺点是每次有联机要求时,inetd的daemon必须依联机的种类去执行相对映的指令,所以速度比较慢。

另一种启动FTP的方式是使用standalonedaemon,也就是直接执行FTPdaemon,当它接收到新的联机时,就fork()出来处理,这种方式联机建立的速度较快,比较适合专门的FTP服务器。

使用inetd

我们先来介绍如何使用inetd的方式启动FTP服务器。首先,请编辑/etc/inetd.conf,将ftp设定开头的#移除:

ftpstreamtcpnowaitroot/usr/libexec/ftpdftpd-l
ftpstreamtcp6nowaitroot/usr/libexec/ftpdftpd-l

接下来,我们必须使用下列指令重跑inetd:

#kill-1`cat/var/run/inetd.pid`现在您就可以开始使用FreeBSD的FTP服务了。

使用独立Daemon

如果您要以独立的daemon方式启动FTP,请先确定在inetd.conf中没有启动FTP服务。接下来,请在新增一个档案/usr/local/etc/rc.d/ftpd.sh内容如下:

#!/bin/sh
ftpd_program="/usr/libexec/ftpd"
ftpd_flags="-D-l"
case$1in
start)
echo"StartingFTPD"
$ftpd_program$ftpd_flags
;;
stop)
echo"StoppingFTPD"
killallftpd
;;
restart)
$0stop
sleep1
$0start
;;
esac


编辑完后,我们必须将该档案变成可执行:

#chmod755/usr/local/etc/rc.d/ftpd.sh接下来,您就可以使用下列指令启动FTPD了:

#/usr/local/etc/rc.d/ftpd.shstart如果您要停止FTPD服务,则使用下列指令:

#/usr/local/etc/rc.d/ftpd.shstart编辑欢迎讯息

当我们联机到一个FTP站台时,我们可以看到二个欢迎讯息,一个是登入前的讯息,另一个是登入后的讯息。以下列讯息为例:

#ftplocalhost
Trying::1...
Connectedtolocalhost.alexwang.com.
220-WelcometoMyFTPServer.
220-
220-Thisisawelcomemessage
220-
220-Nicetoseeyou.
220vmware.alexwang.comFTPserver(Version6.00LS)ready.
Name(localhost:alex):
331Passwordrequiredforalex.
Password:
230-Thisisthemessageoftheday.
230-
230-Itwillbeshownafteruserlogin.
230Useralexloggedin.
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftp>
开头为220-的就是登入前的讯息,我们称它为欢迎讯息。以230-为开头的是登入后的讯息,我们称它为本日讯息(Messageoftheday)。这二种讯息我们都可以自行设定。

如果您要设定的是登入前的讯息,请新增一个档案/etc/ftpwelcome,并将您的讯息写入该文件中。以下为上述范例中的讯息内容:

WelcometoMyFTPServer.
Thisisawelcomemessage
Nicetoseeyou.


您不需要写220-等数据,FTP服务器会自动帮您加上这种代码。而登入后的讯息是存放在/etc/ftpmotd,您可以编辑该档以进行设定。

限制账号与联机来源

我们可以设定限制某些账号不可以使用FTP登入。使用者在登入FTP服务器时,有几个规则会拒绝该账号登入:

如果/var/run/nologin存在,则所有账号都不可以登入。这个档案可以用来暂时停止FTP服务。
使用者一定要有密码才能登入,没有密码的使用者无法登入。
使用者名称不可以出现在/etc/ftpusers中。
使用者群组不可以出现在/etc/ftpusers中。
使用者所使用的shell必须要时合法的shell。合法的shell会被定义在/etc/shells中。
除了匿名模式外,使用者名称不可以是ftp或anonymous。关于匿名模式,我们会在下一小节中说明。
/etc/ftpusers定义了不可以使用FTP服务的使用者及群组。我们来看一下该档案的内容:

#$FreeBSD:src/etc/ftpusers,v1.132004/06/3016:47:08maximExp$
#
#listofusersdisallowedanyftpaccess.
#readbyftpd(8).
root
toor
daemon
operator
bin
tty
kmem
games
news
@guest
...


我们可以看到该档案中已经有一些使用者不可以登入FTP。这些使用者都是系统预设的账号,我们也可以经由修改它来加入其它使用者。

在/etc/ftpusers中,如果开头是"@"表示群组名称。例如上述档案内容中的@guest表示群组guest不可以登入系统。

除了控制使用者账号外,在「inetd」模式下,我们还可以控制联机来源。所有FreeBSD中由inetd所启动的服务都可以经由修改/etc/hosts.allow以使用TCPWrappd来限制联机来源。下列为预设的/etc/hosts.allow内容:

#Provideasmallamountofprotectionforftpd
ftpd:localhost:allow
ftpd:.nice.guy.example.com:allow
ftpd:.evil.cracker.example.com:deny
ftpd:ALL:allow


如果我们要限制某几个IP或网域不能使用FTP,可以使用下列范例:

#Provideasmallamountofprotectionforftpd
ftpd:localhost:allow
ftpd:210.122.13.5:deny
ftpd:.evil.cracker:deny
ftpd:ALL:allow


我们在上述范例中拒绝IP210.122.13.5及evil.cracker网域的主机使用FTP,并在最后一行设定其它来源都许可。

如果您要设定只有某些来源可以使用FTP,而拒绝大多数的主机,则可以设定:

#Provideasmallamountofprotectionforftpd
ftpd:localhost:allow
ftpd:192.168.0.:allow
ftpd:my.friend.com:allow
ftpd:ALL:deny


我们设定了只有本机(localhost)、192.168.0.x、及my.friend.com才可以使用FTP,其它联机都拒绝。

修改登陆的目录路径chroot

一般使用者登入后,预设会进入自己的家目录中。使用者可以改变工作路径到系统的任何目录中。如果您希望使用者登入后只能在自己的家目录中活动,而不能进入其它系统目录中,可以使用chroot的功能。

所谓的chroot就是将某一个目录变成使用者看到的根目录。例如,我们让使用者alex登入后,将/home/alex变成根目录。则alex在使用指令「cd/」时,还是会停留在/home/alex。如果他使用指令「pwd」查看目前所在路径,则会显示/。如此一来,我们就可以确保使用者不会到处乱跑,进入一些不该进入的地方。这个功能对于提升FTP的安全性有莫大的助益。

设定chroot的方法很简单,只要修改/etc/ftpchroot即可。chroot的设定是以使用者、群组的基础,以下是几个设定范例:

alex
@guest
john/var/ftp
@other/var/ftp


上述范例中的第一行是设定使用者alex登入后,以自己的家目录为根目录。第二行的@guest表示只要是群组为guest的使用者,都以自己的家目录为根目录。而第三、四行分别表示使用者john及群组other都以/var/ftp为根目录。

只要我们善用chroot的功能,就可以加强保护系统其它目录,让没有权利的使用者不可以进入系统目录中。建议您在开放FTP服务时,将所有使用者都加入/etc/ftpchroot中。

源代码网供稿.
网友评论 (0)
会员中心
服务器类
本站推荐
服务器类之精华