SFTP(SSH File Transfer Protocol)权限设置的核心目标是限制用户仅能通过SFTP传输文件,无法通过SSH登录,并通过Chroot Jail(目录隔离)约束其访问范围。以下是详细操作流程:
首先创建一个专门用于SFTP的用户(如sftpuser),并设置密码:
sudo adduser sftpuser # 按提示输入密码及用户信息
sudo passwd sftpuser # 确认密码
将用户的默认Shell更改为/sbin/nologin或/bin/false,禁止其通过SSH登录:
sudo usermod -s /sbin/nologin sftpuser
为便于批量管理,创建一个SFTP用户组(如sftpusers),并将用户加入该组:
sudo groupadd sftpusers # 创建组
sudo usermod -aG sftpusers sftpuser # 将用户添加到组
编辑SSH配置文件/etc/ssh/sshd_config,添加以下内容以启用SFTP并限制用户权限:
sudo nano /etc/ssh/sshd_config
在文件末尾添加(若已有Subsystem sftp行,需注释原行并替换):
# 启用内置SFTP子系统(推荐,更安全)
Subsystem sftp internal-sftp
# 限制SFTP用户的Chroot目录(%h代表用户家目录)
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
说明:
Match Group sftpusers:匹配sftpusers组内的所有用户;ChrootDirectory %h:将用户限制在其家目录(如/home/sftpuser),无法访问上级目录;ForceCommand internal-sftp:强制用户只能使用SFTP,无法执行SSH命令。SFTP用户的家目录及子目录权限需严格遵循以下规则:
root用户,权限设为755(用户可读/执行,组和其他用户仅可读/执行),防止用户修改目录结构:sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
uploads),所有权归用户及其所属组,权限设为755(或775,若需组内其他用户写入):sudo mkdir /home/sftpuser/uploads
sudo chown sftpuser:sftpusers /home/sftpuser/uploads
sudo chmod 755 /home/sftpuser/uploads
注意:ChrootDirectory指定的目录(如/home/sftpuser)必须由root拥有,且不能有写权限(避免用户逃逸Chroot环境)。保存配置文件后,重启SSH服务使更改生效:
sudo systemctl restart sshd
使用SFTP客户端(如FileZilla或命令行)连接服务器,验证用户权限:
sftp sftpuser@your_server_ip
cd ..(切换至上层目录),应提示Permission denied;uploads目录,尝试上传文件(如put localfile.txt),应成功;ssh sftpuser@your_server_ip,应提示This service allows sftp connections only.(或类似信息)。若服务器启用了SELinux,需调整上下文以允许SFTP访问:
sudo setsebool -P sftp_home_dir on # 允许SFTP访问家目录
sudo chcon -Rv --reference=/home/sftpuser /home/sftpuser/uploads # 设置上传目录上下文
通过以上步骤,即可完成SFTP用户权限的设置,确保用户只能通过SFTP传输文件,且访问范围被严格限制在其家目录内。