VSFTP的作用和搭建不着重说,这里主要详解VSFTPD的虚拟用户。

VSFTP可以使用系统账户或者匿名账户登录,但是出于安全的考虑,通常建议使用vsftp虚拟账户来登录ftp服务器,虚拟用户是指使用独立的文件保存vsftp用户帐号,虚拟账户只能登录ftp服务器。

实验环境:RHEL6.3

服务端:192.168.2.216

客户端:192.168.2.217

安装相应的软件包

# yum -y install vsftpd ftp

为了实验可以成功,先暂时关闭防火墙。

#service iptables stop

#setenforce 0

基本配置

1. 添加虚拟用户口令文件

#vi /etc/vsftpd/vftpuser.txt

添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。

gupt12   #用户名

123456   #密码

dhb      #用户名

123456   #密码

2. 生成虚拟用户口令认证文件

将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。

#rpm –qa |grep db4-utils   #查看系统有没有安装生成口令认证文件所需的软件db4-utils。

#rpm –ivh db4-utils-4.7.25-17.el6.i686.rpm #安装生成口令认证文件所需的软件db4-utils。

#db_load –T –t hash –f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db #使用db_load命令生成虚拟用户口令认证文件。

3. 编辑vsftpd的PAM认证文件

#vim /etc/pam.d/vsftpd(先注释其他的行,添加下面这两行:)

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

4. 建立本地映射用户并设置宿主目录权限

所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。

#useradd –d /home/vftpsite –s /sbin/nologin vftpuser

#chmod 700 /home/vftpsite

5. 配置vsftpd.conf(设置虚拟用户配置项)

#vi /etc/vsftpd/vsftpd.conf

guest_enable=YES         #开启虚拟用户

guest_username=vftpuser  #FTP虚拟用户对应的系统用户

pam_service_name=vsftpd  #PAM认证文件

6. 重启vsftpd服务

#service vsftpd restart

7. 测试虚拟用户登录FTP

C:\Users\gzsimware>ftp 192.168.2.216

连接到 192.168.2.216。

220 (vsFTPd 2.2.2)

用户(192.168.2.216:(none)): gupt12

331 Please specify the password.

密码:

230 Login successful.

ftp>

虚拟用户高级设置

1.建立各个虚拟用户自身的配置文件

#vim /etc/vsftpd/vsftpd.conf

添加:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

#mkdir /etc/vsftpd/vsftpd_user_conf

2.编辑gupt12的配置文件(使之实现只能下载的功能)

#vim /etc/vsftpd/vsftpd_user_conf/gupt12

添加:

anon_world_readable_only=NO #开放gupt12的下载权限(只能下载)。注意这个地方千万不能写成YES,否则gupt12将不能列出文件和目录。

3.编辑dhb的配置文件(使之可以实现上传和下载功能)

#########################################################

# vim  /etc/vsftpd/vsftpd_user_conf/dhb

write_enable=YES                #开放本地用户的写权限。

anon_world_readable_only=NO     #开放dhb的下载权限

anon_upload_enable=YES          #允许匿名上传文件。

anon_mkdir_write_enable=YES     #是否允许匿名用户有创建目录的权利。这里选择YES

anon_other_write_enable=YES     #开放dhb删除和重命名的权限

########################################################

测试

#在服务端192.168.2.216创建测试文件

#cd /home/vftpsite

#touch 1.txt 2.txt

#在linux客户端192.168.2.217测试,这里只用dhb用户登录来测试。

[root@localhost ~]# ftp 192.168.2.216

Connected to 192.168.2.216 (192.168.2.216).

220 (vsFTPd 2.2.2)

Name (192.168.2.216:root): dhb

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

227 Entering Passive Mode (192,168,2,216,188,25).

150 Here comes the directory listing.

-rw-r--r--    1 0        0               8 Jan 14 02:32 1.txt

-rw-r--r--    1 0        0              11 Jan 14 02:32 2.txt

226 Directory send OK.

ftp> get 1.txt   可以下载

local: 1.txt remote: 1.txt

227 Entering Passive Mode (192,168,2,216,241,204).

150 Opening BINARY mode data connection for 1.txt (8 bytes).

226 Transfer complete.

8 bytes received in 7.8e-05 secs (102.56 Kbytes/sec)

ftp> put 10.txt  可以上传

local: 10.txt remote: 10.txt

227 Entering Passive Mode (192,168,2,216,113,167).

150 Ok to send data.

226 Transfer complete.

8 bytes sent in 0.000164 secs (48.78 Kbytes/sec)

#window下测试

C:\Users\gzsimware>ftp 192.168.2.216

连接到 192.168.2.216。

220 (vsFTPd 2.2.2)

用户(192.168.2.216:(none)): dhb

331 Please specify the password.

密码:

230 Login successful.

ftp> ls

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

1.txt

10.txt

2.txt

226 Directory send OK.

ftp: 收到 22 字节,用时 0.00秒 22000.00千字节/秒。

ftp> get 10.txt    这里可以下载

200 PORT command successful. Consider using PASV.

150 Opening BINARY mode data connection for 10.txt (8 bytes).

226 Transfer complete.

ftp: 收到 8 字节,用时 0.00秒 8000.00千字节/秒。

ftp> put d:/22.txt 这里可以上传,上传的时候要指明路径。

200 PORT command successful. Consider using PASV.

150 Ok to send data.

226 Transfer complete.

ftp: 发送 30 字节,用时 0.01秒 2.31千字节/秒。

ftp>

#window下还可以用工具直接登录服务器,就不用输入命令来实现上传和下载的功能了。如下图:

#关于虚拟用户方面的问题,有不懂的可以留言,大家一起进步,谢谢。