如何在Linux命令行创建带目录监禁且禁用SSH的FTP用户
vsftpd创建无SSH权限的监禁FTP用户解决方案
核心问题根因
你遇到的权限同步失效、默认走SFTP的问题,本质是两个配置错误:
- vsftpd默认会校验系统用户的shell是否存在于
/etc/shells列表,你禁用SSH时设置的nologinshell默认不在列表中,会被vsftpd判定为非法用户 - SFTP是SSH服务的子功能,走22端口,和vsftpd提供的FTP(21端口)是完全独立的协议,没有做隔离的情况下会优先走SFTP
具体操作步骤
1. 修正用户的shell配置(实现禁SSH、允许FTP登录)
- 给目标用户设置nologin shell,禁止SSH登录:
sudo usermod -s /sbin/nologin testuser - 编辑
/etc/shells文件,将nologin路径加入列表,让vsftpd认可该shell:
打开文件后新增一行/sbin/nologin保存即可
2. 完善vsftpd配置(实现目录监禁、权限控制)
编辑/etc/vsftpd.conf,确保以下配置项存在且值正确:
# 禁用匿名登录 anonymous_enable=NO # 允许本地系统用户登录FTP local_enable=YES # 开放写权限 write_enable=YES # 开启用户目录监禁,禁止跳转上级目录 chroot_local_user=YES # 允许监禁目录具备写权限(若不需要可删除,更安全的方案是给根目录设root所有755权限,子目录开放用户写权限) allow_writeable_chroot=YES # 指定用户登录后的根目录,按用户名自动匹配,$USER会自动替换为登录的用户名 local_root=/ftp/$USER # 开启被动模式,配置被动端口范围(避免防火墙拦截) pasv_enable=YES pasv_min_port=40000 pasv_max_port=40100 # 不需要强制TLS的话可以关闭,避免普通FTP客户端连接失败 ssl_enable=NO
3. 手动创建监禁目录并配置权限
示例将所有FTP用户的根目录放在/ftp下,testuser的监禁目录为/ftp/testuser:
# 创建对应目录 sudo mkdir -p /ftp/testuser # 给监禁根目录设置root所有、755权限,符合chroot安全要求 sudo chown root:root /ftp/testuser sudo chmod 755 /ftp/testuser # 若需要给用户开放上传权限,单独创建可写子目录 sudo mkdir /ftp/testuser/upload sudo chown testuser:testuser /ftp/testuser/upload sudo chmod 755 /ftp/testuser/upload
4. 禁用指定用户的SFTP权限(可选,完全禁止22端口访问)
编辑/etc/ssh/sshd_config,在文件末尾添加以下配置:
Match User testuser ForceCommand /bin/false
5. 重启服务生效
# 重启vsftpd服务 sudo systemctl restart vsftpd # 重启SSH服务 sudo systemctl restart sshd # 开放防火墙端口(21是FTP端口,40000-40100是被动模式端口) sudo ufw allow 21/tcp sudo ufw allow 40000:40100/tcp
验证方法
- SSH登录验证:执行
ssh testuser@服务器IP,提示This account is currently not available即为SSH禁用成功 - FTP登录验证:用FTP客户端连接服务器21端口,输入testuser的用户名密码,登录后仅能看到监禁目录内的内容,无法跳转上级目录,权限符合要求即为配置成功
内容的提问来源于stack exchange,提问作者Vamsi Krishna
相关产品推荐
相关产品推荐

