创建虚拟用户

所谓虚拟用户就是,所有虚拟用户会统一映射为一个指定的系统普通账号:访问共享位置,即为此系统普通用户的家目录,当然每个虚拟用户也可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

虚拟用户帐号的存储方式:

1,创建专门一个文件存放用户密码,但是该文件需要用hash格式。所以需要用下面的这条命令:

    db_load -T -t hash -f vusers.txt vusers.db 

实现步骤:

一,创建用户数据库文件

"注意该文件的格式:第一行 用户名,第二行 密码,以此类推"
    vim /etc/vsftpd/vusers.txt 
    wang        #用户名
    wangpass    #密码
    mage        #用户名
    magepass    #密码

二,修改文件格式

 1,cd /etc/vsftpd/ 
 2,db_load -T -t hash -f vusers.txt vusers.db 
 #为了安全修改文件权限
 3,chmod 600 vusers.*

三,创建系统普通用户,和FTP访问目录

 1,创建用户
    useradd -d /var/ftproot -s /sbin/nologin vuser • 
 2,因为FTP是只能普通用户登入,所以普通用户需要对目录有读和执行权限,这样才能上传下载文件。
    chmod +rx /var/ftproot/  
 3,因为FTP为了安全根目录不能有写权限,因为根目录有写权限,我们登入上去是不是就能根目录给删了对吧,所以需要执行下面的命令。
    chmod -w /var/ftproot/
   #为了能有个上传下载的目录单独在创建一个目录。
    mkdir /var/ftproot/upload 
   #因为登入上来映射的用户都是vuser用户所以要给vuser用户对upload目录有完全控制的权限,所以可以给它ACL权限这样比较安全
    setfacl -m u:vuser:rwx /var/ftproot/upload 

四,创建PAM模块配置文件

因为现在的验证方式跟之前的不同了,所以需要自己创建一个PAM模块文件,然后在主配置文件中调用该文件

1,创建PAM模块文件

     vim /etc/pam.d/vsftpd.db 
     文件内容如下:
     auth required pam_userdb.so db=/etc/vsftpd/vusers 
     account required pam_userdb.so db=/etc/vsftpd/vusers 

2,重新指定PAM配置文件

    vim /etc/vsftpd/vsftpd.conf 
    guest_enable=YES  
    guest_username=vuser 
    "pam_service_name=vsftpd.db"注意该项在配置文件中已经有需要修改一下     

六,SELinux设置

禁用SELinux或者 setsebool -P ftpd_full_access 1

七,重启服务

    如果是CentOS-7:systemctl restart vsftpd
    如果是CentOS-6:service vsftpd restart

八,测试

这时候登入就可以用刚才创建的vusers.txt文件里的用户名密码了

例如:
    [root@ansible-7 ~]# ftp 192.168.136.7
    Connected to 192.168.136.7 (192.168.136.7).
    220 (vsFTPd 3.0.2)
    Name (192.168.136.7:root):  "wang"
    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,136,7,149,32).
    150 Here comes the directory listing.
    drwxrwxr-x    2 0        0               6 Feb 27 00:58 upload
    226 Directory send OK.

成功了,但是有一个不足就是每个用户登入上来都是一个权限一个目录这样不太灵活,下面实现每个虚拟用户登入上来各自对应不同的权限,并且还可让他登入上来对应的目录都不同一个。

九,实现虚拟用户不同权限

1,修改FTP主配置文件

    vim /etc/vsftpd/vsftpd.conf 
    #下面这个选项,作用就是让虚拟用户支持独立的权限配置文件
    user_config_dir=/etc/vsftpd/vusers.d/ 

2,给每个虚拟用户创建一个独立的权限配置文件


    #创建配置文件存放的路径
    mkdir /etc/vsftpd/vusers.d/ 
    #进入此目录
    cd /etc/vsftpd/vusers.d
    #创建各自用户的权限配置文件

    vim wang 
    anon_upload_enable=YES      #允许wang用户上传文件
    anon_mkdir_write_enable=YES #允许wang用户创建文件
    anon_other_write_enable=YES #允许wang用户删除文件
    local_root=/wangroot        #登录wang目录改变至指定wangroot目录里
    注意"wangroot这个目录手工创建,并且该目录不能有w权限,可以为wang用户单独创建一个共享目录并且权限也需要改为766,让Other具有读写权限"

    vim li
    anon_other_write_enable=YES  #允许li用户删除文件
    local_root=/liroot           #登录li目录改变至指定liroot目录里
    "同样liroot目录也需要手工创建,操作跟wang账号的一样"

3,测试

一,wang账号测试
    登入测试:成功
        [root@ansible-7 ~]# ftp 192.168.136.7
        Connected to 192.168.136.7 (192.168.136.7).
        220 (vsFTPd 3.0.2)
        Name (192.168.136.7:root): wang
        331 Please specify the password.
        Password:
    上传文件测试:成功
        ftp> !ls #查看本机文件
        anaconda-ks.cfg  Downloads          Music     Templates
        Desktop      f1     Pictures  Videos   Documents    Public
        ftp> put f1  #上传文件
        local: f1 remote: f1
        227 Entering Passive Mode (192,168,136,7,226,193).
        150 Ok to send data.
        226 Transfer complete.
        1073741824 bytes sent in 3.56 secs (301946.46 Kbytes/sec)
        ftp> ls  #查看目录列表
        227 Entering Passive Mode (192,168,136,7,40,213).
        150 Here comes the directory listing.
        -rw-------    1 1001     1001     1073741824 Feb 27 03:12 f1
    创建目录测试:成功
        ftp> mkdir wangdir #创建目录
        257 "/upload/wangfile" created
        ftp> ls             #查看目录列表
        227 Entering Passive Mode (192,168,136,7,208,167).
        150 Here comes the directory listing.
        -rw-------    1 1001     1001     1073741824 Feb 27 03:12 f1
        drwx------    2 1001     1001            6 Feb 27 03:12 wangdir
        226 Directory send OK.
    "下载文件测试:失败测试"
    "为什么呢,因为FTP默认,被下载的文件必须所有人都有读权限,如果想什么文件都能下载的话,"
    "需要修改主配置文件加上这一项: anon_world_readable_only=NO即可 (默认YES)"
        ftp> get f1  
        local: f1 remote: f1
        227 Entering Passive Mode (192,168,136,7,74,156).
        550 Failed to open file.
    删除文件测试:成功
        ftp> delete f1
        250 Delete operation successful.
        ftp> ls
        227 Entering Passive Mode (192,168,136,7,130,109).
        150 Here comes the directory listing.
        drwx------    2 1001     1001            6 Feb 27 03:12 wangfile
        226 Directory send OK.

二,li账号测试
    登陆测试:成功
        [root@ansible-7 ~]# ftp 192.168.136.7
        Connected to 192.168.136.7 (192.168.136.7).
        220 (vsFTPd 3.0.2)
        Name (192.168.136.7:root): li
        331 Please specify the password.
        Password:

    上传文件测试:失败
        ftp> put f1
        local: f1 remote: f1
        227 Entering Passive Mode (192,168,136,7,232,207).
        550 Permission denied.
    下载文件测试:成功。默认FTP就支持匿名下载所以限制不了
        ftp> get f1
        local: f1 remote: f1
        227 Entering Passive Mode (192,168,136,7,219,59).
        150 Opening BINARY mode data connection for f1 (1073741824 bytes).
        226 Transfer complete.
        1073741824 bytes received in 2.55 secs (421099.01 Kbytes/sec)
    删除文件测试:成功
        ftp> delete f1
        250 Delete operation successful.
        ftp> ls
        227 Entering Passive Mode (192,168,136,7,195,31).
        150 Here comes the directory listing.
        drwx------    2 1001     1001            6 Feb 27 03:34 a
    创建目录测试:失败
        ftp> mkdir lidir
        550 Permission denied.