|
源代码网推荐启动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中。 源代码网供稿. |