#服务器配置
服务器 web01 192.168.178.124
win10电脑
##虚拟用户模式顾名思义,就是虚拟创建出的用户,也是最为安全的一种
1.安装Berkeley DB工具
[root@web01 vsftpd]# yum install db4 db4-utils -y
2.创建用于FTP认证的用户数据库,奇数行账户名、偶数行密码
[root@web01 vsftpd]# vim ftp_user.txt
josen
666
pyyu
888
3.由于这样的明文信息很不安全,且vsftpd也无法加载该格式的数据,因此得用db_load命令对ftp_user.txt文件数据加密,且设置权限使得普通用户无法访问
#创建加密文件 -T 和-t参数必须加上,用于转化普通文本为vsftpd识别的数据库文件
[root@web01 vsftpd]# db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db
[root@web01 vsftpd]# file ftp_user.txt
ftp_user.txt: ASCII text
[root@web01 vsftpd]# ll ftp_user.txt
-rw-r--r-- 1 root root 19 2月 6 15:46 ftp_user.txt
[root@web01 vsftpd]# chmod 600 ftp_user.txt.db
[root@web01 vsftpd]# rm -rf ftp_user.txt
[root@web01 vsftpd]#
4.创建当虚拟用户登录后默认访问的文件夹路径,且和linux中的一个本地用户做一个映射关系,防止匿名用户登录后,创建了文件夹,但是系统没有此用户报错权限问题
#创建一个新用户,指定用户家目录,且禁止登陆
[root@web01 vsftpd]# useradd -d /var/ftpdir -s /sbin/nologin virtual_chao
#检查此ftpdir的属性
[root@web01 vsftpd]# ls -ld /var/ftpdir
drwx------ 2 virtual_chao virtual_chao 62 2月 9 19:20 /var/ftpdir
#更改文件夹权限
[root@web01 vsftpd]# chmod -Rf 755 /var/ftpdir/
#添加virtual_chao用户至ftpusers禁止用户登录文件,增大系统安全,但是不会影响虚拟用户登录
[root@web01 vsftpd]# echo 'virtual_chao' >> ftpusers
5.此时需要创建支持虚拟用户的PAM文件, PAM是一组安全机制的模块,编辑认证文件/etc/pam.d/vsftpd
[root@web01 ~]# cat /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/ftp_user
account required pam_userdb.so db=/etc/vsftpd/ftp_user
6.修改vsftpd.conf文件
[root@web01 ~]# grep -Ev "^$|#" /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名模式
local_enable=YES #允许本地用户
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd #指定PAM认证文件
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
guest_enable=YES #开启虚拟用户
guest_username=virtual_chao #指定虚拟用户账号
allow_writeable_chroot=YES #如果用户被限制只能在其家目录,允许用户可以对家目录写入数据
7.针对不同虚拟用户设置不同权限
##用户ftp认证的虚拟账号,ftp_user.txt
josen 允许上传、新建、修改、查看、删除权限
pyyu 只读权限
#新建管理虚拟用户权限的文件夹
[root@web01 vsftpd]# mkdir /etc/vsftpd/virtual_user_dir
#进入文件夹,创建权限配置文件
[root@web01 vsftpd]# cd /etc/vsftpd/virtual_user_dir
[root@web01 virtual_user_dir]# vim josen
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#再创建一个pyyu文件,禁止写入
[root@web01 virtual_user_dir]# pwd
/etc/vsftpd/virtual_user_dir
[root@web01 virtual_user_dir]# vim pyyu
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
#编辑vsftpd主配置文件,添加如下一行
[root@web01 virtual_user_dir]cat /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/virtual_user_dir
8.重启vsftpd服务
[root@web01 virtual_user_dir]# systemctl restart vsftpd
9.在自己的机器win10用ftp登录服务器
##使用客户端登录用户josen,进行读写
C:\Users\JosenWinter>ftp 192.168.178.124
连接到 192.168.178.124。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
#用匿名用户登录josen
用户(192.168.178.124:(none)): josen
331 Please specify the password.
密码:
230 Login successful.
#此时看到的是匿名用户设的家目录内容
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
#josen有权限增加文件
ftp> mkdir 我到此一游
257 "/我到此一游" created
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwx------ 2 1003 1003 6 Feb 10 07:15 我到此一游
226 Directory send OK.
ftp: 收到 76 字节,用时 0.00秒 25.33千字节/秒。
##使用客户端登录用户pyyu,进行读写
C:\Users\JosenWinter>ftp 192.168.178.124
连接到 192.168.178.124。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.178.124:(none)): pyyu
331 Please specify the password.
密码:
230 Login successful.
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwx------ 2 1003 1003 6 Feb 10 07:15 我到此一游
226 Directory send OK.
ftp: 收到 76 字节,用时 0.00秒 38.00千字节/秒。
ftp> mkdir 你到此一游
#无法写入数据,只能读取
550 Permission denied.
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwx------ 2 1003 1003 6 Feb 10 07:15 我到此一游
226 Directory send OK.
ftp: 收到 76 字节,用时 0.00秒 38.00千字节/秒。