服务器如何设置vsftpd的虚拟用户,以访问特定的子目录?

分享于 

5分钟阅读

ubuntu

  繁體

问题

我想将只能访问子文件夹的虚拟用户添加到vsftpd。

FTP结构为:

  • www
    • website_name1
    • sub_folder1
  • website_name2
    • sub_folder2
    • sub_folder3
  • website_name3
  • website_name4
  • 主帐户可以访问www文件夹和所有子目录,我想添加一个可以访问sub_folder1的虚拟用户,并且只能访问sub_folder1


    答案1

    我设法得到一个半解决方案(不完美但足够好)

    首先你需要安装vsftp和PAM

    
    apt-get install vsftpd libpam-pwdfile
    
    
    
    

    编辑/etc/vsftpd.conf

    
    nano /etc/vsftpd.conf
    
    
    
    

    然后粘贴如下

    
    listen=YES
    
    
    anonymous_enable=NO
    
    
    local_enable=YES
    
    
    write_enable=YES
    
    
    local_umask=022
    
    
    local_root=/var/www
    
    
    chroot_local_user=YES
    
    
    allow_writeable_chroot=YES
    
    
    hide_ids=YES
    
    
    
    #virutal user settings
    
    
    user_config_dir=/etc/vsftpd_user_conf
    
    
    guest_enable=YES
    
    
    virtual_use_local_privs=YES
    
    
    pam_service_name=vsftpd
    
    
    nopriv_user=vsftpd
    
    
    guest_username=vsftpd
    
    
    
    

    创建用户

    建立目录以存储用户

    
    mkdir /etc/vsftpd
    
    
    htpasswd -cd /etc/vsftpd/ftpd.passwd user1
    
    
    
    
    
    htpasswd -d /etc/vsftpd/ftpd.passwd user2
    
    
    
    
    
    htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)
    
    
    
    

    创建用户后,现在可以更改PAM配置文件

    
    nano /etc/pam.d/vsftpd
    
    
    
    

    并删除该文件内的所有内容,并用下面

    
    auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
    
    
    account required pam_permit.so
    
    
    
    

    这将为在/etc/vsftpd/ftpd.passwd中定义的虚拟用户启用登录,并且将禁用本地用户

    接下来,我们需要为这些虚拟用户添加一个用户。这些用户将不能访问shell,被称作vsftpd

    
    useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
    
    
    
    

    用户必须在vsftpd conf文件中匹配guest_username=vsftpd

    定义目录访问

    重要的行

    
    user_config_dir=/etc/vsftpd_user_conf
    
    
    
    

    这意味着当user1登录时将查找以下文件

    
    /etc/vsftpd_user_conf/user1
    
    
    
    

    这个文件与vsftpd.conf相同,因此你可以定义一个新的local_root

    我们希望user1只能访问var/www/website_name1/sub_folder1,因此我们需要创建vsftpd_user_conf文件夹:

    
    mkdir /etc/vsftpd_user_conf
    
    
    
    

    现在创建用户文件:

    
    nano /etc/vsftpd_user_conf/user1
    
    
    
    

    ,并输入以下行

    
    local_root=/var/www/website_name1/sub_folder1
    
    
    
    

    现在重新启动vsftp

    
    service vsftpd restart
    
    
    
    

    现在,你应该能够以用户身份登录,只能看到var/www/website_name1/sub_folder1和文件夹和文件的内部。

    就是这样,现在可以添加任意数量的用户,并限制他们访问你想要的文件夹。

    记住,如果不创建用户conf文件,它默认以root用户身份进入var/www文件夹(在上面的示例中)

    如果该子文件夹用户可以修改,则更改子文件夹的所有者:

    
    chown vsftpd:nogroup /var/www/website_name1/sub_folder1
    
    
    
    


    Server  USE  acc  SET  用户  DIR