vsftpd虚拟用户设置

  工作中我们为了方便上传下载文件,提高工作效率和安全性,会经常使用ftp,并且是很多人使用,同时又分配不同的权限。那没么很显然直接使用本地用户是不可取的,也是无法实现不同权限的管理。下面就介绍一下vsftpd虚拟用户的配置。


一、概念介绍

   本地用户:简单的说就是服务器真实存在的用户,也就是/etc/passwd 中所能看见的用户。

   虚拟用户:顾名思义,不是真实存在的用户,是我们虚拟出来的,/etc/passwd 中是看不见的。

   宿主用户:虚拟用户想要登录ftp,那么必须调用一个本地用户来登陆,那么这个用户就叫做宿主用户。


二、两种模式

主动模式(Port Mode):命令连接的建立是由客户端C的随机端口向服务端S的TCP 21端口请求连接产生;数据连接的建立是由:(命令端口的连接建立在成功后)客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口随机端口N在等着你进行数据连接),当服务端S收到这个Port命令后,就会利用服务器S自己的TCP 20端口向客户端打开的那个随机端口N进行请求连接,最终连接成功。

被动模式(Pasv Mode):命令连接的建立也是由客户端C的随机端口向服务端S的TCP 21端口请求连                              接产生;(命令端口的连接建立在成功后)服务端S会发信息给客户端C,这个信息内容是(服务端S在本地打开了一个高位端口M,你现在去连接我吧),当客户端C收到这个信息后,就利用客户端自己的随机端口向服务端S的M端口进行连接,进而数据连接建立成功。


三、文件配置

   1、安装工具

   虚拟用户的验证文件是利用db_load工具生成的,那么我们先来安装这个工具。

   可以利用rpm -qa | grep db4 来查看是否安装

   若返回

   db4-devel-4.3.29-10.el5_5.2

   db4-4.3.29-10.el5_5.2

   db4-utils-4.3.29-10.el5_5.2

   db4-tcl-4.3.29-10.el5_5.2

   db4-java-4.3.29-10.el5_5.2

   说明已经安装。

   如返回为空,可使用下面命令安装

   yun  install db4* -y


   2、配置防火墙

   编辑防火墙配置文件,加入以下内容。

   vim /etc/sysconfig/iptables

   -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT(允许21端口通过防火                        墙)

   -A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:35999 -j ACCEPT(设置ftp被                        动模式的端口范围,只要不与其他服务端端口冲突,可随意定义端口范围)

   重启防火墙

   service iptables restart

查看配置是否生效

iptables -nL  (L是大写的)

返回结果中含有以下字段代表成功

   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21

   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:30000:35999


   3、修改配置文件

为了保险起见,也是一个良好的习惯,我们先备份主配置文件,以便错误时恢复。

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

编辑主配置文件

vim /etc/vsftpd/vsftpd.conf

   anonymous_enable=NO    不允许匿名用户登录

   local_enable=YES    允许本地用户访问 (注意:主要是为虚拟宿主用户,如果该项目设定为NO                                                                      那么所有虚拟用户将无法访问

   write_enable=YES    允许写入即上传 (如果为NO,所有用户将不能上传文件)

   local_umask=022    上传文件默认权限 (022代表上传的文件权限为644)    

   dirmessage_enable=YES    开启目录标语

   xferlog_enable=YES    开启日志 (生产中强烈建议开启)

   connect_from_port_20=YES    设定数据连接端口为20

   xferlog_std_format=YES    设定日志格式为标准格式

   idle_session_timeout=300    设定会话超时时间 (300秒无操作强制断线)

   data_connection_timeout=2    设定连接超时时间 (2秒无法连接将认为超时)

   accept_timeout=5    设定请求超时时间 (5秒无法请求将认为超时)

   connect_timeout=2    设定下一次连接时间 (1秒后重新连接)

   async_abor_enable=YES    设定支持异步传输

   ascii_upload_enable=YES    设定支持ASCII模式的上传

   ascii_download_enable=YES    设定支持ASCII模式的下载

   listen=YES    开启监听

   listen_port=21    设定监听端口(可根据环境修改,但不可与其他服务端口冲突,连接是需指                                                  定端口

   tcp_wrappers=YES    设定支持tcp_wrappers封装

   local_root=/www/    设定ftp的根目录为www (推荐网站的根目录)

   guest_enable=YES    设定开启虚拟用户

   guest_username=apache    设定虚拟用户的宿主用户 (推荐使用apache运行账户,可以避免很                        多权限设置问题。如果你的apache运行账户为test,那么推荐这里使用test用户

   user_config_dir=/etc/vsftpd/vconf    设定虚拟用户个人vsftp的配置文件存放路径。(我们                        将在这个目录下,为每一个虚拟用户设定一个配置文件)

   virtual_use_local_privs=YES    设定虚拟用户与本地用户具有相同的权限

   pam_service_name=vsftpd    设定PAM服务下vsftpd的验证配置文件名

   chroot_local_user=YES    设定禁止用户登出家目录

   max_clients=200    设定最大连接数

   max_per_ip=10    设定最大ip数

   pasv_enable=YES    开启被动模式

   pasv_min_port=30000    设定被动模式最小端口

   pasv_max_port=35999    设定被动模式最大端口

   listen_address=192.168.168.203    设定访问ip限制


4、创建相应配置文件

   建立虚拟用户名单文件:

   touch /etc/vsftpd/virtusers

   编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保                        留

   vim /etc/vsftpd/virtusers

   test1

   123456

   test2

   123456

   test3

   123456


   生成虚拟用户验证文件:

   db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

   (如果不能使用此命令,请按照上文安装对应的程序包)

   chmod 600 /etc/vsftpd/virtusers.db 修改虚拟用户验证文件权限

注意:修改虚拟用户时,需将原有的virtusers.db文件删除,并重使用db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db 生成虚拟用户验证文件。因为这条命令只能覆盖原有文件,并没有替换原有文件,当你由3个用户减少到2个时,没有删除virtusers.db文件,直接重新执行db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db命令,你会发现被删掉的用户依然可以登录。virtusers.db的实质就是一个二进制文件,我们可以用strings命令查看里面的内容,你会发现虽然virtusers里的用户已经被删除了,但virtusers.db中依然没存在。只是修改密码时不用删除virtusers.db文件,因为他会直接覆盖掉原来的密码,但是仍然推荐删除virtusers.db文件后重新生成。



建立虚拟用户个人vsftp的配置文件

mkdir /etc/vsftpd/vconf

创建对应的个人vsftp的配置文件,并以用户名称命名必须按照用户名称命名

touch test1 test2 test3

编辑用户test1配置文件,其他用户相同,根据需求给予相应权限,不宜过大

   local_root=/www/test1/    虚拟用户的家目录 (必须在ftp根目录下

   write_enable=YES    

   anon_world_readable_only=NO

   anon_upload_enable=YES

   anon_mkdir_write_enable=YES

   anon_other_write_enable=YES


   5、配置验证文件

   在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效

   同样修改前先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak

   vim /etc/pam.d/vsftpd

   auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers

   account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers

注意:如果系统为64为,则上面的lib改为lib64,否则配置失败

四、重启vsftp服务

   service vsftpd restart

   使用test1、test2、test3用户进行登录测试和权限测试了,这里不再累述。

五、大功告成