问题
我想将只能访问子文件夹的虚拟用户添加到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