如何通过访问特定子目录为vsftpd设置虚拟用户?

我需要能够向只能访问子文件夹的vsftpd添加虚拟用户。 我想要使​​用虚拟用户的原因是我只想在服务器上拥有1个真实用户。

FTP结构是:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

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

另外为了避免一些混淆,我还需要另一个用户访问sub_folder3并且只能访问sub_folder3 。 我的观点是,我需要能够逐个用户地选择哪个文件夹和子文件夹。

我已经找到了添加用户以查看整个结构或设置用户命名文件夹的方法,这些对我来说都没用。

我在这里发现了类似的问题:

如何为多个用户设置VSFTPD,包括添加特定目录

但它建议proftpd ,我虽然一般不太安全。
或者我错过了这里的观点?

通过一些游戏,我设法提出了一个半解决方案(不完美,但足够好)

使用2707974答案和我已经获得的信息,我已经能够得到我需要的东西。

首先,您需要安装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 

根据您的确切需求编辑虚拟用户最重要的位是虚拟用户设置注释后的所有内容

创建用户

您可以使用数据库或htpasswd我发现htpasswd更快更容易使用。

创建一个目录来存储您的用户

 mkdir /etc/vsftpd htpasswd -cd /etc/vsftpd/ftpd.passwd user1 

添加其他用户只是省略-c

 htpasswd -d /etc/vsftpd/ftpd.passwd user2 

我只是设法让它使用CRYPT工作,限制为8个字符 使用超过8个字符使用openssl生成兼容的哈希和管道直接进入htpasswd

 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 

您现在应该能够以user1身份登录,该用户只能看到var/www/website_name1/sub_folder1以及其中的任何文件夹和文件。

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

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

如果子文件夹可由用户修改,则可能需要更改共享子文件夹的所有者:

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

试试这本手册。 也许会对你有用。

怎么做

安装vsftpd和PAM库

编辑/etc/vsftpd.conf/etc/pam.d/vsftpd

使用自定义目录创建用户帐户(例如/ var / www /)

使用正确的chmodchown设置目录

创建具有服务器完全访问权限的管理员用户

  1. 安装vsftpd (非常安全的FTP Deamon)和libpam-pwdfile来创建虚拟用户

我想创建FTP用户,但我不想添加本地unix用户(没有shell访问,没有主目录等)。 PAM(可插入身份validation模块)将帮助您创建虚拟用户。

sudo apt-get install vsftpd libpam-pwdfile

  1. 编辑vsftpd.conf

首先,您需要备份原始文件

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

然后创建一个新的

sudo vim /etc/vsftpd.conf

复制并粘贴以下行。 该文件应仅包含以下行:

 listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 nopriv_user=vsftpd virtual_use_local_privs=YES guest_enable=YES user_sub_token=$USER local_root=/var/www/$USER chroot_local_user=YES hide_ids=YES guest_username=vsftpd 
  1. 注册虚拟用户

要注册用户,请使用htpasswd ,因此我假设您已在服务器上运行apache2 。 创建一个vsftpd文件夹,然后将配置文件放入其中。

sudo mkdir /etc/vsftpd

然后

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c意味着我们将创建文件,如果它还不存在-d强制MD5,你需要它在ubuntu 12.04上,只需使用它

该命令将提示输入密码。

如果您想在之后添加新用户:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. /etc/pam.d/vsftpd配置PAM

同样,您需要备份orignal文件

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

并创建一个新的

sudo vim /etc/pam.d/vsftpd

复制并粘贴这两行(这应该是唯一的内容)。 我只坚持这两行,我浪费了很多时间保留原件,只是添加了这些。

 auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd account required pam_permit.so 
  1. 创建没有shell访问权限的本地用户

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

您可以使用id命令检查它是否已创建:id vsftpd。 由于check_shell参数,我们使用/ bin / false shell定义用户(即使您不使用它)。 当最终用户连接到FTP服务器时,它们将用于权限和所有权:

chmodchown

  1. 重启vsftpd

常见的方法是像所有deamon一样使用init.d.

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. 创建目录

根据配置,所有用户都将被放入此文件夹:/ var / www / user1。

您需要使用特定权限创建它们:根文件夹不可写!

  / [root = /var/www/user1] => 555 www [ /var/www/user1/www ] => 755 docs [ /var/www/user1/docs ] => 755 

注意:用户无法在根目录中创建文件或文件夹。

vsftpd.conf我们有chroot_local_user=YES因此用户无法看到其文件夹之外的任何内容。 对他来说,服务器看起来像这样:

所以只需运行以下命令:

 mkdir /var/www/user1` chmod -w /var/www/user1 mkdir www/user1/www chmod -R 755 /var/www/user1/www chown -R vsftpd:nogroup /var/www/user1 

/var/www/user1文件夹已存在或连接将失败。

现在您可以尝试连接FTP

  1. 创建管理员用户以访问整个服务器

要创建管理员用户,我们需要使用htpasswd注册新用户。

在我们这样做之前,我建议您检查/etc/ftpusers文件,该文件定义了不允许与ftp连接的某些用户。 我认为这仅适用于本地用户而非虚拟用户,但以防万一不选择此文件中包含的名称。

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

现在我们需要在/etc/vsftpd.conf添加一个新行

chroot_list_enable=YES

这意味着您的用户将被放入他们的文件夹(作为监狱)除了/ etc /中的用户

vsftpd.chroot_list

让我们创建这个文件并添加我们的用户,该文件是一个包含“theadmin”的简单行。 每行添加一个用户。 这意味着您不需要创建/var/www/theadmin文件夹,用户将登录并启动/home/vsftpd

重新启动服务器,你就完成了!

是的,你可以,并为了灵活性创建一个userconfig目录和文件, mkdir /var/www/userconfs或任何你想要更改userconfs名称,然后创建一个特定的文件

 vi /var/www/userconfigs/ftpuseraccount 

内部类型, local_root=/var/www (或者你想通过dir访问的任何内容) guest_username=www-data (文件顶部编辑的ubuntu所有者)

通过添加user_config_dir=/var/www/userconfigs (或者你替换它的任何内容)更新你的vsftpd.conf后,这个帐户将访问指定的任何sdir yo