CentOS SFTP权限设置技巧
为提升管理效率,建议创建专门的SFTP用户组(如sftpusers),并将用户添加至该组。创建用户时,需指定主目录并设置不可登录shell(/sbin/nologin),防止用户通过SSH登录系统:
groupadd sftpusers # 创建SFTP用户组
useradd -m -g sftpusers -s /sbin/nologin sftpuser # 创建用户并加入组
passwd sftpuser # 设置用户密码
编辑/etc/ssh/sshd_config文件,通过Match指令针对SFTP用户组进行限制。关键配置包括:
ForceCommand internal-sftp);ChrootDirectory %h,%h代表用户主目录);Subsystem sftp internal-sftp # 启用内部SFTP
Match Group sftpusers # 匹配sftpusers组
ChrootDirectory %h # 限制根目录为用户主目录
ForceCommand internal-sftp # 强制使用SFTP
AllowTcpForwarding no # 禁用TCP转发
X11Forwarding no # 禁用X11转发
ChrootDirectory指定的主目录(如/home/sftpuser)必须属主为root,权限为755(用户可读/写/执行,组和其他用户仅可读/执行),避免用户修改目录结构逃逸chroot环境:chown root:root /home/sftpuser # 主目录属主为root
chmod 755 /home/sftpuser # 主目录权限755
uploads),属主为用户自身,组为sftpusers,权限为755(或775若需组内用户写入):mkdir /home/sftpuser/uploads # 创建上传目录
chown sftpuser:sftpusers /home/sftpuser/uploads # 属主为用户,组为sftpusers
chmod 755 /home/sftpuser/uploads # 目录权限755
为避免用户在上传目录中创建的文件继承用户自身组(而非sftpusers组),可设置SGID位。这样,目录内新文件和子目录将自动继承父目录的组所有权:
chown root:sftpusers /home/sftpuser # 主目录属组改为sftpusers
chmod 2775 /home/sftpuser # 设置SGID位(2表示SGID)
若SELinux处于Enforcing模式,需调整上传目录的安全上下文,允许SFTP访问。使用semanage和restorecon命令:
semanage fcontext -a -t ssh_home_t "/home/sftpuser/uploads(/.*)?" # 添加上下文规则
restorecon -Rv /home/sftpuser/uploads # 恢复目录上下文
完成所有配置后,重启SSH服务使更改生效:
systemctl restart sshd # 重启SSH服务
systemctl enable sshd # 设置开机自启
使用SFTP客户端(如FileZilla或命令行)连接服务器,验证权限设置:
sftp sftpuser@your_server_ip # 输入密码登录
ls .. # 尝试访问上级目录,应提示"Permission denied"
put local_file.txt # 上传文件至uploads目录,应成功
替换密码认证为SSH密钥认证,提升账户安全性。生成密钥对并将公钥上传至用户家目录的.ssh文件夹:
ssh-keygen -t rsa # 客户端生成密钥对
ssh-copy-id sftpuser@your_server_ip # 复制公钥至服务器
修改/etc/ssh/sshd_config启用密钥认证:
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁用密码认证