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下还可以用工具直接登录服务器,就不用输入命令来实现上传和下载的功能了。如下图:
#关于虚拟用户方面的问题,有不懂的可以留言,大家一起进步,谢谢。