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

Modified on: Thu, 14 Jun 2018 07:42:53 +0800

我需要能够向只能访问子文件夹的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,但我通常不那么安全
或者我错过了这一点?

作者:Community,Avenyet

最佳答案

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

使用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更快更容易使用。

制作存储用户的目录

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

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

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

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

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

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

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

并删除此文件中的所有内容并替换为以下

nano /etc/pam.d/vsftpd

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

接下来,我们需要为这些虚拟用户添加用户。这些用户无权访问shell,将被称为vsftpd

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

用户必须匹配vsftpd配置文件中的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文件夹:

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

现在创建用户文件:

user_config_dir=/etc/vsftpd_user_conf

并输入以下行

local_root=/var/www/website_name1/sub_folder1

现在重启vsftp

/etc/vsftpd_user_conf/user1

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

现在您可以根据需要添加任意数量的用户,并限制他们访问您希望的任何文件夹。

要记住,如果您不创建用户配置文件,它将默认以root用户身份显示在var / www文件夹中(在上例中)

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

mkdir /etc/vsftpd_user_conf
作者:,Avenyet

相关问答

添加新评论