上次我们看到了基于
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
服务
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- 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
只有浏览和下载的权限,并没有创建目录等其它权限。
说明:可以看到,用户
zpp002
不但有浏览和下载权限,同时也具备创建目录等