You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux命令行创建带目录监禁且禁用SSH的FTP用户

vsftpd创建无SSH权限的监禁FTP用户解决方案

核心问题根因

你遇到的权限同步失效、默认走SFTP的问题,本质是两个配置错误:

  1. vsftpd默认会校验系统用户的shell是否存在于/etc/shells列表,你禁用SSH时设置的nologin shell默认不在列表中,会被vsftpd判定为非法用户
  2. 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

验证方法

  1. SSH登录验证:执行ssh testuser@服务器IP,提示This account is currently not available即为SSH禁用成功
  2. FTP登录验证:用FTP客户端连接服务器21端口,输入testuser的用户名密码,登录后仅能看到监禁目录内的内容,无法跳转上级目录,权限符合要求即为配置成功

内容的提问来源于stack exchange,提问作者Vamsi Krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:45:06