上次我们看到了基于Red Hat5平台下的DHCP服务的搭建,本次我们通过一个例子来看一下Red Hat5平台下的FTP服务的搭建。
FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层网络协议,需要有相应的客户端和服务器端软件才能进行文件传输。本次我们以vsftpd服务器端软件为例。该软件可以从站点http://vsftpd.beasts.org/中下载,在RHEL5系统中会自带有vsftpd软件。并且,安装好vsftpd软件包以后,将自动添加vsftpd系统服务,通过“/etc/init.d/vsftpd”脚本可以控制vsftpd服务的启动和终止,而无需手动执行“/usr/sbin/vsftpd”程序。
下面我们来看看在Red Hat5上是如何通过vsftpd服务器软件,搭建FTP的。具体的概念以及配置步骤和注意事项,咱们边做边说。
第一部分:建立基于本地用户的vsftpd服务<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1.匿名FTP
访问匿名FTP服务器时不需要密码,只要使用用户名“ftp”或“anonymous”即可通过验证。当需要提供公开访问的文件下载资源,或者让用户上传一些无需保密的数据资料时,可以选择搭建匿名FTP服务器。搭建的步骤如下所示:
1>.调整匿名上传目录权限。
在RHEL5系统中,匿名用户对应的系统帐户为ftp,其宿主目录为“/var/ftp”,该目录也就是匿名用户访问vsftpd服务时所在的根目录(可通过anon_root配置项更改)。
说明:将其中pub子目录的属主修改为ftp,并保留其可写权限,可提供给匿名用户上传文件使用。我们给/var/ftp/创建一个文件到/var/ftp/目录下,以便稍后的测试。
2>.修改vsftpd.conf配置文件,开放匿名用户访问、上传许可。
说明:如果希望匿名用户在上传目录中能够进行覆盖、删除、重命名文件等写入操作,还可以添加“anon_other_write_enable=YES”的配置项。此项配置可能带来安全性问题,所以应谨慎使用。
注意:由于匿名FTP根目录“/var/ftp/”的默认权限为755,因此不要将该目录的属主更改为ftp,否则匿名访问时可能会报错“500 OOPS:vsftpd:refusing to run with writable anonymous root”,此错误会导致访问失败。
3>.重新启动vsftpd服务
4>.此时,我们到客户机上访问FTP服务器,测试下载及上传功能。
可以看到,用户使用匿名用户FTP,不但可登录,并且可以下载FTP服务器上的资源。
2.本地用户FTP
Vsftpd可以直接使用Linux系统的本地用户作为FTP用户,提供基于用户名/密码的登录验证。使用本地用户登录FTP服务器后,默认将位于自己的宿主目录中,且在宿主目录中拥有读写权限,并允许切换到其他目录。使用chroot_local_user配置项可以将本地用户禁锢在宿主目录中(不允许切换到其他目录),使用local_root配置项可以将本地用户的FTP根目录设置为同一个文件夹。
下面我们配置一个基于本地用户并进行用户限制的FTP服务器步骤如下:
1>.添加FTP测试用户(也就是本地用户)。新建一个文件file1以便测试。
2>.修改vsftpd.conf配置文件,开放本地用户。
说明:配置“chroot_local_user=YES”项,可以有效提高FTP服务器的安全性。否则,默认将允许用户切换到服务器中的“/var/”、“/etc/”、“/boot/”等宿主目录以外的文件夹,可能带来安风险。如果启用“local_root=/var/ftproot”的配置选项时,本地用户登录该FTP服务器后,根目录将更改为指定的文件夹。该选项适用于FTP根目录需要保持固定的情况。如果希望vsftpd服务 只对特定的本地用户开放,可以使用userlist_enable、userlist_deny配置项并结合用户列表文件“/etc/vsftpd/user_list”实现,此处不做演示。
3>.重新启动vsftpd服务。
4>.在客户端访问FTP服务器,测试下载及上传功能。
可以看到用户登录和下载服务器上的资源都没有问题
第二部分:建立基于虚拟用户的vsftpd服务
1.
建立虚拟用户的用户名/密码数据库
Vsftpd服务的虚拟用户数据库是使用Berkeley DB格式的数据文件。建立该数据库文件需要用到db_load命令工具,从RHEL5光盘中安装db4-utils-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.3.29-9.fc6.i386.rpm软件包后可获得该工具。
首先建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行为上一行中用户所对应的密码。
说明:此处建立了两个密码都为123.com的虚拟用户zpp001和zpp002.
然后用db_load工具将列表文件转化为DB数据库文件。
说明:在db_load命令中,“-f”选项用于指定用户名/密码列表文件,“-T”选项允许非Berkeley DB的应用程序使用从文本格式转换的DB数据文件,“-t hash”选项指定读取数据文件的基本方法。将文件vusers.db的权限降底为600是为了安全性考虑。关于db_load命令的详细说明可参阅“/usr/share/doc/db4-utils-4.3.29/utility/db_load.html”文件。
2.
建立FTP访问的根目录及虚拟用户对应的系统帐号
说明:Vsftpd虚拟用户需要有一个对应的系统用户帐号(该帐号不需要设置密码及登录Shell),该用户帐号的宿主目录作为所有虚拟用户登录后的共同FTP根目录。
3.
建立PAM认证文件
说明:PAM配置文件主要用于为程序提供用户认证控制,vsftpd服务使用的默认PAM配置文件为“/etc/pam.d/vsftpd”,s可以参考该文件的格式建立新的PAM配置文件,用于虚拟用户的认证控制。配置时请注意将db选项指定为先前建立的虚拟用户数据文件vusers(省略.db扩展名)
4.
修改vsftpd.conf配置文件,添加虚拟用户支持
在vsftpd.conf配置文件中,添加guest_enable、guest_userusername配置项,将访问FTP服务的所有虚拟用户对应到同一系统用户帐号virtual,并修改pam_service_name配置项,指向上一步建立的PAM配置文件“/etc/pam.d/vsftpd.vu”。
说明:在vsftpd服务中,虚拟用户账户默认作为匿名用户处理以降低权限,因此对应的权限设置通常使用以anon_开头的配置项,
5.
为不同的虚拟用户建立独立的配置文件
通过前面的四步,实际上已经可以重启vsftpd并提供服务了,使用虚拟用户帐号可以登录FTP服务器并下载文件。此步骤介绍如何为个别虚拟用户设置不同的访问权限。
假如现在有这样的要求:zpp001用户只有浏览和下载的权限,而zpp002可以浏览、下载、改名、删除文件、建立和删除目录的权限,可以按如下的步骤实现:
1>.修改vsftpd.conf主配置文件,添加用户配置目录支持。
说明:添加此行配置,指定用户配置目录的位置。
2>.为用户zpp001和zpp002建立独立的配置目录及文件。
说明:如果需要禁用或者允许一部分虚拟用户帐号,同样可以使用“/etc/vsftpd/user_list”列表文件。需要注意的是,在“/etc/vsftpd/ftpusers”文件中加入虚拟用户名,并不能禁用对应的系统帐号。
6.
重新启动vsftpd服务
7.使用虚拟用户帐户访问FTP服务
说明:现在可以看到,虚拟用户zpp001只有浏览和下载的权限,并没有创建目录等其它权限。
转载于:https://blog.51cto.com/zpp2009/266737