Ubuntu SFTP权限设置如何操作
小樊
41
2025-12-22 23:54:41
Ubuntu SFTP权限设置实操指南
一 环境准备与基础配置
- 安装 OpenSSH 服务器(如未安装):sudo apt update && sudo apt install openssh-server。
- 创建专用用户与用户组:sudo groupadd sftpusers;sudo adduser sftpuser 或 sudo useradd -m -G sftpusers sftpuser。
- 备份并编辑 SSH 服务配置:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak;sudo nano /etc/ssh/sshd_config。
- 在文件末尾添加或修改如下内容,以启用内置 SFTP 并限制仅 SFTP 访问:
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
说明:ChrootDirectory 指定用户登录后的根目录;internal-sftp 更安全且便于权限控制。完成后重启服务:sudo systemctl restart ssh。以上步骤完成后,SFTP 权限的框架即搭建完成。
二 目录结构与权限模型
- 推荐的目录与权限(示例以用户主目录为 /home/sftpuser):
- 根目录(Chroot 目标):sudo chown root:root /home/sftpuser;sudo chmod 755 /home/sftpuser。
- 可写目录(用于上传):sudo mkdir -p /home/sftpuser/upload;sudo chown sftpuser:sftpusers /home/sftpuser/upload;sudo chmod 755 /home/sftpuser/upload。
- 要点:被 Chroot 的目录及其上级目录必须由 root 拥有,且不可对 SFTP 用户可写;用户的可写目录放在其下并授予所属用户(必要时所属组)写权限。
- 多用户共享目录示例(管理员可读写所有,用户仅能访问自身目录):
- 目录:/opt/ftpsite/{admin,user1,user2};组:sftpadmins、sftpusers。
- 权限:chown -R admin:sftpadmins /opt/ftpsite/admin;chmod 700 /opt/ftpsite/admin;
chown -R user1:sftpusers /opt/ftpsite/user1;chmod 750 /opt/ftpsite/user1;
chown -R user2:sftpusers /opt/ftpsite/user2;chmod 750 /opt/ftpsite/user2。
- 说明:750 表示属主可读写执行,属组可读执行,其他无权限;700 仅属主可访问。以上权限设置可确保隔离与最小权限原则。
三 常见场景配置示例
- 仅 SFTP 且禁止 Shell 登录:创建用户时使用 -s /usr/sbin/nologin(或 /sbin/nologin),并在 sshd_config 的 Match 段保持 ForceCommand internal-sftp,即可实现仅 SFTP 访问。
- 集中根目录(所有 SFTP 用户共享同一 Chroot 根):
- 创建 /sftp_root;sudo chown root:root /sftp_root;sudo chmod 755 /sftp_root;
- 为每个用户创建子目录:/sftp_root/sftpuser;sudo chown sftpuser:sftp_users /sftp_root/sftpuser;sudo chmod 700 /sftp_root/sftpuser;
- sshd_config 中 Match Group sftp_users 的 ChrootDirectory 改为 /sftp_root。
- 端口与加固:如需修改端口,可在 sshd_config 设置 Port 35021 并重启 ssh;同时建议保持 AllowTcpForwarding no、X11Forwarding no,并仅开放必要端口(默认 22 或自定义端口)。
四 验证与故障排查
- 连接测试:sftp sftpuser@your_server_ip(如修改端口:sftp -oPort=35021 sftpuser@ip)。
- 日志排查:查看 /var/log/auth.log 中的 sshd/sftp 登录与权限拒绝信息,可快速定位配置或权限问题。
- 常见问题速查:
- 登录即断开或报错:检查 ChrootDirectory 是否为 root 所有且权限为 755;用户可写目录必须在该根下且由用户或属组拥有。
- 无法上传:确认目标目录对 SFTP 用户具备写权限(如 755 或 775 且用户属于对应组)。
- 配置不生效:确认 sshd_config 语法正确,执行 sudo systemctl restart ssh 重载服务,并避免重复或冲突的 Match 段。