Ubuntu22.04配置vsftpd限制多用户主目录访问不生效怎么办
故障原因
你当前配置的chroot逻辑和需求完全相反,且缺少vsftpd 3.0+版本必须的兼容参数,导致限制规则不生效:
chroot_local_user=NO+chroot_list_enable=YES的组合规则是:默认所有本地用户都不锁定主目录,只有写入/etc/vsftpd.chroot_list文件内的用户才会被锁定,你大概率没把UserA、UserB加入该列表,或者规则逻辑选反了。- vsftpd从3.0.0版本开始新增了安全校验:被chroot锁定的用户主目录如果具备用户可写权限,会直接拒绝chroot规则生效,你没加对应兼容参数的话,就算列表写对了也不会生效。
正确配置步骤
方案1:全局锁定所有FTP用户(推荐,适合你当前场景)
直接编辑/etc/vsftpd.conf,修改/新增以下配置项:
# 所有本地用户登录后默认锁定在自身主目录 chroot_local_user=YES # 关闭chroot例外列表 chroot_list_enable=NO # 保留原有用户子目录token配置 user_sub_token=$USER # 允许chroot根目录可写(vsftpd 3.0+必加,否则会报500 OOPS错误) allow_writeable_chroot=YES # 确认基础功能配置已开启(很多人漏配导致无法读写) local_enable=YES write_enable=YES local_umask=022
方案2:仅锁定指定用户(保留列表模式)
如果不想全局锁定,就保留你原有的3项chroot配置,额外新增allow_writeable_chroot=YES参数,然后编辑/etc/vsftpd.chroot_list文件,把需要锁定的用户名逐行写入,每个用户占一行,不要留多余空格:
UserA UserB
权限配置(可选,安全性更高)
如果不想开allow_writeable_chroot=YES参数(更符合vsftpd默认安全设计),可以通过目录权限适配规则:
- 把用户主目录所有者改为root,移除用户的主目录写权限:
chown root:root /home/UserA chmod 755 /home/UserA chown root:root /home/UserB chmod 755 /home/UserB
- 在每个用户主目录下新建专属上传目录,给对应用户分配读写权限:
# 给UserA建上传目录 mkdir /home/UserA/upload chown UserA:UserA /home/UserA/upload chmod 755 /home/UserA/upload # 给UserB建上传目录 mkdir /home/UserB/upload chown UserB:UserB /home/UserB/upload chmod 755 /home/UserB/upload
这种模式下用户登录后不能在主目录根写入文件,但可以进入下属upload目录正常传输文件,同时完全满足无法跳转上级目录的要求。
生效验证
- 先执行配置语法检查,避免配置错误:
vsftpd -t
- 无报错后重启服务生效:
systemctl restart vsftpd
- 测试登录后执行
cd ..,会提示权限拒绝或直接停留在当前主目录,无法访问主目录外的任何路径。
注意:vsftpd是FTP/FTPS服务端,不提供SFTP(基于SSH的文件传输协议)能力,如果你实际需要的是SFTP服务的目录锁定,需要修改
/etc/ssh/sshd_config配置,和vsftpd无关。
内容的提问来源于stack exchange,提问作者cmcau
相关产品推荐
相关产品推荐

