CentOS 5.6下VSFTP使用虚拟用户增加FTP的安全性
实验背景
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的安全性 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接: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/ , 转载请保留本声明!