在 Linux 中,SFTP 权限通常不是靠一个“开关”设置的,而是由 文件系统权限 + SSH/SFTP 服务配置 共同决定的。下面按常见场景给你讲清楚。
SFTP 本质上还是用系统用户访问文件,所以:
ls -l /data
权限含义:
r 读w 写x 进入目录r:能列出文件w:能新建/删除文件x:能进入目录r:能下载w:能上传/覆盖示例:
chown -R user:user /data/sftp
chmod 755 /data/sftp
useradd -m sftpuser
passwd sftpuser
编辑:
/etc/ssh/sshd_config
添加:
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Chroot 目录 必须:
rootchown root:root /data/sftp
chmod 755 /data/sftp
用户上传目录:
mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
重启 SSH:
systemctl restart sshd
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
创建用户:
useradd -g sftp user1
mkdir -p /data/sftp/user1
chown root:root /data/sftp/user1
chmod 755 /data/sftp/user1
chmod 555 /data/sftp
chown root:root /data/sftp
chmod 733 /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
原因:Chroot 目录权限不对(不是 root 属主)
原因:上传目录不是该用户可写
原因:没加 ForceCommand internal-sftp
SFTP 权限 = Linux 文件权限 + sshd_config 限制 + Chroot 目录规则
如果你愿意,可以告诉我:
我可以直接帮你写一份完整配置。