概述: 所谓虚拟用户,就是指客户端登录时所使用的 FTP 用户名和密码在系统里并不真实存在;实际上每个虚拟用户是通过一个真实的本地用户来登录 FTP 服务器的。这样做可以有效的控制服务器的安全,因为用户并不真实存在,所以该用户不能远程登录,也不能从物理上登录该系统,从而达到了保护服务器的目的。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

软件来源: [url]http://vsftpd.beasts.org[/url]

软件版本: vsftpd-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.0.5.tar.gz

操作系统: RedHat EnterpriseLinuxAS3

 

1.vsftpd 软件的安装

# tar –zxvf vsftpd-2.0.5.tar.gz // 解压软件包

# cd vsftpd-2.0.5               // 进入解压后的目录

# make && make install             // 编译并安装

# cp vsftpd.conf /etc/             // 拷贝主配置文件到 /etc 目录下

# chkconfig vsftpd off             // 关闭进程守护模式

 

2 .添加一个本地用户,并且禁止其 SSH 方式登录

# useradd -s /sbin/nologin wjc

 

3 .编辑 vsftpd 主配置文件

# vi /etc/vsftpd/vsftpd.conf

local_enable=YES     // 打开本地用户

local_umask=022   // 本地用户创建文件夹和上传文件的权限,实际值 =777-umask

 

connect_from_port_20=YES    // 连接端口为 20

 

max_per_ip=4         // 每个 IP 最多连接 4 个客户端

max_clients=200      //FTP 最多支持 200 个用户

 

listen=YES        // 打开监听模式,否则需要用守护模式启动服务

 

guest_enable=YES // 开启虚拟用户访问功能

guest_username=wjc   // 虚拟用户实际用 wjc 用户来登录

pam_service_name=ftp.vu     // 密码验证方式

user_config_dir=/etc/vsftpd_user_conf // 虚拟用户的配置文件所在的目录

 

注:,因为主配置文件是被先读的,然后再读用户的配置文件。所以

在主配置文件中给的权限越低,在后面用户管理的时候对用户的权限划分的空间就越大

 

4 .编辑验证方式文件

# vi /etc/pam.d/ftp.vu

auth     required /lib/security/pam_userdb.so db=/etc/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

 

5 .编辑虚拟用户和密码

# vi /tmp/login.txt

test1   // 用户名

test1   // 密码

test2  

test2

 

6 .虚拟用户的权限控制

# mkdir /etc/vsftpd_user_conf

/etc/vsftpd_user_conf 目录下用虚拟用户的登录名来命名其配置文件

给用户 test1 添加配置文件

# vi /etc/vsftpd_user_conf/test1

local_root=/var/ftpvu/testftp      // 限制虚拟用户登录的主目录

anon_world_readable_only=no     // 准许虚拟用户可以浏览

write_enable=yes              // 开放写的权限

anon_upload_enable=yes      // 开放上传权限

anon_mkdir_write_enable=yes // 开放创建目录的权限

anon_other_write_enable=yes // 其他写权限,如:重命名

 

同样你可以创建 test2 文件,给 test2 用户创建不同的权限,以达到控制虚拟用户不同的访问权限的目的

 

7.建立访问者的口令库文件,然后修改其权限

# db_load -T -t hash -f /tmp/login.txt /etc/vsftpd_login.db

# chmod 600 /etc/vsftpd_login.db

 

8 .开启 FTP 服务

# /usr/local/sbin/vsftpd &

 

9. 验证服务是否开启

// 查看进程

# ps -x | grep vsftpd      

// 查看端口

# netstat –tln

 

10. 关闭 FTP 服务

# ps –x | grep vsftpd

# kill -9 PID     //-9 这个参数为强制,可不加; PID 为进程号,可以用 ps 来查看

目前没有更好的办法来停止 FTP 服务,所以只能杀进程来关闭了

 

11. 可能出现的问题

500 OOPS: could not bind listening IPv4 socket

有可能 FTP 服务器是运行的 ;

也有可能是因为没有关闭守护状态