CentOS 5.6下VSFTP使用虚拟用户增加FTP的安全性

2013年5月11日 分类: Linux (116 个脚步)

实验背景

Dreamfire公司由于业务需求,需要架设一台FTP服务器,出于系统稳定和安全等多方面考虑,决定使用开源的CentOS 5.6 Linux系统作为服务器平台,以架设vsftp服务器。其次为了最大限度地保证公司内部FTP服务器上“/home”目录下用户的安全性,决定采用虚拟用户的方式访问FTP服务器。管理员为了能够更好的灵活管理服务器上每个用户的访问权限,根据公司的需求和当前网络状况制定了一套可行的方案如下:

1、 所有用户都通过用户名:ftpall、密码:123登录FTP服务器的公共目录ftpall;

2、 公共目录ftpall是供员工下载资料所用的,只允许下载,不允许删除、修改、重命名ftpall中的文件或目录;

3、 所有用户都可以通过自己的用户和密码登录到FTP服务器上的宿主目录里,且只能看到自己的文件和文件夹,而且可以添加、删除、修改、重命名自己的文件或文件夹;

4、 匿名访问的用户根据实际情况开启,默认不开启;

5、 所有员工访问公共目录ftpall的下载速度最大为100KB/s,而访问各自的宿主目录的下载速度最大为300KB/s;

6、 考虑到FTP服务器的承受力,每次只允许最多100个用户连接服务器;

7、 考虑到公司内部某些员工可能会用迅雷、快车等BT下载工具下载文件,所以将同一IP地址的FTP客户机与FTP服务器建立的最大连接数不超过3个;

注意:虚拟用户账户是为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账户。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户相对安全,因此正逐步替代本地用户账户。

实验步骤

为了更方便的测试实验环境,本实验采用ftpall作为所有员工的公共用户,xiaonuo作为每个用户的代表,密码为123456。

一、挂载CentOS 5.6安装光盘的第一张系统光盘,并安装vsftpd软件包

# mount /dev/xvdd /media/ 
# yum --disablerepo=\* --enablerepo=c5-media install vsftpd 
Loaded plugins: fastestmirror 
Loading mirror speeds from cached hostfile 
 * c5-media: 
c5-media                                                  | 1.3 kB     00:00 
Setting up Install Process 
Package vsftpd-2.0.5-16.el5_5.1.x86_64 already installed and latest version 
Nothing to do

显示我的操作系统上已经安装了vsftpd软件包,如果没有安装的话,将会执行安装vsftpd。vsftpd的默认安装目录是:/etc/vsfpd

二、建立虚拟用户口令库文件

建立虚拟用户的口令库文件,文件中奇数行设置虚拟用户的用户名,偶数行设置虚拟用户的口令。为了便于记忆,可以将文件命名为v-account.txt文件。不过Linux下文件是不支持扩展名滴哦,只是为了标示而已。

注意:用户的口令库文件中,不要存在空格和空行。

# vi /etc/vsftpd/v-account.txt,添加FTP虚拟账号

ftpall 
123 
xiaonuo 
123456 
xulau 
123456

三、生成vsftpd的认证文件

使用db_load命令生成认证文件,“-f”命令选项设置的值是虚拟用户的口令库文件,即/etc/vsftpd/v-account.txt,命令的参数设置为需要生成的认证文件名/etc/vsftpd/v-account.db,该文件必须放在“/etc/vsftpd/”中。

在生成认证文件之前,需要安装db4相关软件,否则系统是不支持db_load命令的。

# yum install -y db4 db4-utils

注意:db_load是软件包db4-utils带的命令,默认情况下,在CentOS 5.6上没有安装,需要用户手动安装db4_utils这个软件包才支持db_load命令。

生成vsftpd的认证文件的命令如下:

# db_load -T -t hash -f /etc/vsftpd/v-account.txt /etc/vsftpd/v-account.db

由于vsftpd的认证文件v-account.db里保存了所有虚拟用户的用户名和密码,为了增强其安全性,应当设置只有root才可以查看,命令如下:

# chmod 600 /etc/vsftpd/v-account.db

四、建立虚拟用户所需的PAM配置文件

# vi /etc/pam.d/vsftpd,将默认配置全部用“#”注释,然后在文件的末尾添加

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/v-account 
account required /lib/security/pam_userdb.so db=/etc/vsftpd/v-account

如果是x86 64bit操作系统,则添加

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/v-account 
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/v-account

否则虚拟用户是无法登陆的,并出现下述错误信息(这个问题我折腾的好久)

PAM unable to dlopen(/lib/security/pam_userdb.so) 
PAM [error: /lib/security/pam_userdb.so: wrong ELF class: ELFCLASS32] 
PAM adding faulty module: /lib/security/pam_userdb.so

注意:当然也可以另外新建立一个配置文件,但是需要在/etc/vsftpd/vsftpd.conf配置文件中将pam_service_name=vsftpd后面的值改为新建文件的名称。

五、建立虚拟用户及要访问的目录并设置相应的权限。

建立vsftpd虚拟目录所需的系统公共用户账号,账号名为vftp,指定用户的宿主目录是“/var/ftp/vftphome”。

# useradd -d /var/ftp/vftphome vftp

参数“-d”是建立用户之后,并将自己的宿主目录指向指定的位置。

注意:用户名和宿主目录名称最好一样,便于记忆。这些用户都会存放在系统的/etc/passwd下,并且用户密码都存放在vsftpd认证文件中。所以是不能用虚拟用户登录系统的,安全性自然而然也加强了。

# tail -1 /etc/passwd
vftp:x:503:504::/var/ftp/vftphome:/bin/bash

六、设置vsftpd.conf主配置文件。

在对vsftpd.conf配置文件进行修改前,应先将原有的文件进行备份,以便出现配置错误时可进行恢复。

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

通过查找、替换、修改的方式,在vsftpd.conf配置文件中添加虚拟用的配置项,内容如下:

# 禁用匿名用户登录FTP服务器 
anonymous_enable=NO 
# 启用本地用户登录(本质上是为了能够让虚拟用户登录) 
local_enable=YES 
# 将所有本地用户限制在自己的目录中 
chroot_local_user=YES 
# 配置vsftpd使用的PAM模块为vsftpd 
pam_service_name=vsftpd 
# 设置虚拟账户配置文件的主目录为/etc/vsftpd/user_config(后面创建) 
user_config_dir=/etc/vsftpd/users_config 
# 设置FTP服务器最大接入客户端数为100个 
max_clients=100 
# 设置每个IP地址最大连接数为3个 
max_per_ip=3 
# FTP服务器的本地用户最大传输速率设置为300KB/s 
local_max_rate=307200 
# FTP服务器匿名用户最大传输速率设置为100KB/s 
anon_max_rate=102400 

guest_enable=YES 
guest_username=vftp 
virtual_use_local_privs=YES

七、设置公用用户ftpall的配置文件

首先创建虚拟用户配置文件的主文件夹users_config,并在此文件夹下建立虚拟用户的文件ftpall和xiaonuo。

# mkdir /etc/vsftpd/user_config
# touch /etc/vsftpd/user_config/ftpall
# touch /etc/vsftpd/user_config/xiaonuo

在/etc/vsftpd/user_config/ftpall配置文件中添加虚拟用的配置项,内容如下:

local_root=/var/ftp/vftphome/ftpall 
write_enable=NO 
anon_upload_enable=NO 
anon_world_readable_only=YES 
anon_max_rate=102400

八、设置单用户xiaonuo的配置文件

在/etc/vsftpd/user_config/xiaonuo配置文件中添加虚拟用的配置项,内容如下:

local_root=/var/ftp/vftphome/xiaonuo 
# 允许用户浏览FTP目录和下载文件 
anon_world_readable_only=NO 
# 
# 允许用户进行文件改名和删除文件的权限 
anon_other_write_enable=YES 
# 
# 表示用户具有建立和删除目录的权利 
anon_mkdir_write_enable=YES 
# 
# 表示用户可以上传文件 
anon_upload_enable=YES 
# 
# 限制传输速度为300KB/s 
anon_max_rate=307200

通过对以上配置项的组合设置,vsftpd可以为每个虚拟用户配置不同的FTP权限,用户配置文件中没有的配置项将按照vsftpd.conf配置文件中的内容设置。

九、重新启动vsftpd服务,使所有配置文件的设置生效

# service vsftpd restart
关闭 vsftpd:          [确定] 
为 vsftpd 启动 vsftpd:[确定]

十、vsftp虚拟用户配置总结

1、 在v-account.txt中添加用户名和密码

2、 运行如下命令,将用户名和密码添加到数据库中

# db_load -T -t hash -f /etc/vsftpd/v-account.txt /etc/vsftpd/v-account.db

# db_load -T -t hash -f /etc/vsftpd/v-account.txt /etc/vsftpd/v-account.db

3、 在/etc/vsftpd/user_config下创建虚拟用户配置文件,并在其中加入

local_root=/var/ftp/vftphome/用户名

4、 在/var/ftp/vftphome目录下中新建一个文件夹,与虚拟用户的用户名相同(不过我发现,若在虚拟用户配置文件中定义了local_root=/var/ftp/vftphome/用户名,重启vsftpd,会自动创建用户的目录)

CentOS 5.6下VSFTP使用虚拟用户增加FTP的安全性 【声明】本文 CentOS 5.6下VSFTP使用虚拟用户增加FTP的安全性 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/05/centos-5-6%e4%b8%8bvsftp%e4%bd%bf%e7%94%a8%e8%99%9a%e6%8b%9f%e7%94%a8%e6%88%b7%e5%a2%9e%e5%8a%a0ftp%e7%9a%84%e5%ae%89%e5%85%a8%e6%80%a7/ , 转载请保留本声明!

标签:
目前还没有任何评论.
你必须要启用 Javascript