原理:   虚拟用户,顾名思义,并不是一个合法的Linux系统帐户,但是他可以用来登陆该系统上运行的FTP服务器.当用户在连接上FTP服务器后,会被要求输入用户名和密码.FTP服务器在拿到这个用户名和密码后,会调用相应的PAM认证模块对,和系统中的FTP认证文件进行相比较.如果该用户名和密码与FTP认证文件中的某条记录相符,就通过认证,然后该帐户就被映射成一个Linux下的本地帐户,然后根据使用该本地帐户对FTP资源进行访问.否则则断开该连接请求


1、安装

yum -y install vsftpd

yum -y install db4

2、创建虚拟用户文件

cd /etc/vsftpd

vim vlogin.txt      #基数行是账号,偶数行是密码,

wn

wn

weshow

weshow

3、生成pam验证用的文件

db_load -T -t hash -f  /etc/vsftpd/ vlogin.txt  /etc/vsftpd/ vlogin .db


4、修改pam对vsftpd的参数文件,使pam能找到vlogin.db

cd /etc/pam.d

vim vsftpd

屏蔽所有行,加上(如果是32位  lib64  改成  lib  )

auth  required /lib64/security/pam_userdb.so db=/etc/vsftpd/ vlogin
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/ vlogin

ubuntu用户pam_userdb.so文件的路径可能不同


5、修改vsftpd主参数文件 (不要有空格)

cd /etc/vsftpd

vim vsftpd.conf

在最后加上

pasv_max_port=51000 //有时候pasv连接会很慢,因为端口问题,这里限制端口
pasv_min_port=50000
pam_service_name=vsftpd     #调用 /etc/pam.d/vsftpd
guest_enable=YES    # 开启虚拟用户
guest_username=virtual   # 虚拟用户映射的本地账户
user_config_dir= /etc/vsftpd/vlogin_user  # 虚拟用户配置目录
chroot_local_user=YES  #不能跳出指定根目录
#virtual_use_local_privs=YES  #是虚拟用户和主目录权限相同
#userlist_enable=YES  #user_list文件中的用户不能访问FTP


6、创建虚拟用户的宿主用户

useradd -d /home/ftpsite virtual

chmod 777 /home/ftpsite


如果是ubuntu用户

chmod 555 /home/ftpsite



7、配置虚拟用户各自的权限文件(不要有空格)

mkdir  -p  /etc/vsftpd/vlogin_user     (跟 vsftpd.conf中的 user_config_dir的值要一致)

cd  /etc/vsftpd/vlogin_user

为wn用户添加自己的权限,创建wn的权限文件,文件名和用户名要相同

vim  wn

添加

anon_world_readable_only=YES//表示用户可以浏览FTP目录和下载文件
anon_upload_enable=YES//表示用户可以上传文件
anon_mkdir_write_enable=YES//表示用户有创建和删除目录的权限
anon_other_write_enable=YES//表示用户具有文件改名和删除文件的权限
anon_umask=022  //设置用户上传文件后的权限,如果是077,则不能上传文件夹,因为该文件夹不能写


要让用户只能上传不能删除

anon_other_write_enable=NO

或者用这一套配置

anon_umask=022
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
cmds_allowed=ABOR,APPE,CWD,CDUP,FEAT,LIST,MKD,MDTM,PASS,PASV,PWD,QUIT,RETR,REST,STOR,STRU,TYPE,USERm|

7、增加用户fang

cd /etc/vsftpd

vim vlogin.txt

在最后增加

fang

fang


vlogin.txt 更新了  对应的vlogin.db也要更新

db_load -T -t hash -f  /etc/vsftpd/ vlogin.txt  /etc/vsftpd/ vlogin .db