Linux下如何限制SFTP用户在指定目录仅可删除文件不可创建上传
实现SFTP用户可列目录/下载/删除但禁止上传的配置方案
Linux文件系统目录的写权限同时管控文件新增、删除两类操作,无法通过单纯的文件权限拆分两种能力,因此需要结合目录权限配置 + SSH服务端SFTP操作限制组合实现需求。
1. 准备前提信息
先明确几个自定义变量,你可以根据实际场景替换:
- 受限SFTP用户:
sftp_user01 - 受限用户所属组:
sftp_restricted_group - 目标管控目录:
/data/sftp/public/subdir
2. 配置目标目录基础权限
首先设置目录的所有者与所属组,保证用户有进入、读取目录的基础权限:
# 修改目录所属关系,所有者为root,所属组为受限用户组 chown root:sftp_restricted_group /data/sftp/public/subdir # 设置目录权限:所有者读写执行,所属组读执行+可修改目录条目(删除文件需要该权限),其他用户无权限 chmod 2750 /data/sftp/public/subdir
2750中的setgid位可选,作用是保证目录内原有文件的所属组继承父目录,避免因文件所属组不匹配导致用户无法读取/删除。
3. 修改SSH服务配置限制SFTP操作
编辑/etc/ssh/sshd_config文件,在末尾添加针对受限用户/组的匹配规则:
# 针对指定用户组生效,也可改为 Match User sftp_user01 对单个用户生效 Match Group sftp_restricted_group # Chroot目录必须所有者为root、权限不高于755,按需修改为你的实际根目录 ChrootDirectory /data/sftp/public # 强制使用内置SFTP服务,禁用上传/修改/新建类操作,保留读取/删除操作 ForceCommand internal-sftp -P open:write,write,rename,mkdir,rmdir,symlink,link X11Forwarding no AllowTcpForwarding no
这里-P参数是SFTP操作黑名单,我们禁用了写文件、重命名、新建目录、创建链接等新增/修改类操作,仅保留读取、列出目录、删除文件的操作权限。
4. 验证配置生效
首先校验SSH配置合法性,避免配置错误导致SSH服务崩溃:sshd -t
无报错后重启SSH服务生效:systemctl restart sshd
用SFTP客户端登录验证权限是否符合预期:
- 执行
ls subdir可正常列出目录内文件 - 执行
get subdir/old_file.txt可正常下载文件 - 执行
rm subdir/old_file.txt可正常删除目标文件 - 执行
put new_file.txt subdir/会返回权限拒绝,无法上传
注意事项
- 如果你使用的是老旧Linux发行版,先执行
ssh -V确认openssh版本≥5.8,否则不支持internal-sftp的-P参数 ChrootDirectory指定的目录必须所有者为root,权限最大为755,否则SFTP登录会报错
内容的提问来源于stack exchange,提问作者Thobias Bergqvist
相关产品推荐
相关产品推荐

