centos sftp配置中的注意事项
小樊
38
2026-01-02 04:52:31
CentOS SFTP 配置注意事项
一 基础安全与最小权限
- 使用internal-sftp替代外部 sftp-server,便于在 chroot 环境中安全运行,并配合 ForceCommand internal-sftp 强制只启用 SFTP。
- 建议创建专用用户组(如 sftponly),将受限用户加入该组,便于集中管理。
- 禁止 root 通过 SSH 登录:设置 PermitRootLogin no。
- 禁用不必要的通道与功能:AllowTcpForwarding no、X11Forwarding no,减少攻击面。
- 保护配置文件:/etc/ssh/sshd_config 仅允许 root 写入。
- 启用并定期检查日志:关注 /var/log/secure(CentOS)或 /var/log/auth.log(部分发行版)中的 SSH/SFTP 登录与操作记录。
二 目录权限与 Chroot 关键点
- Chroot 根目录(如 ChrootDirectory %h 或自定义目录)必须满足:
- 该目录及其上级目录的所有者为 root,且不可被用户组写入(避免组写权限导致 chroot 失败)。
- 目录权限通常设为 755(drwxr-xr-x),严禁对 chroot 根目录赋予用户写权限。
- 如需可写区域,在 chroot 根下为相应用户创建子目录并赋予其所有权,例如:
- 目录结构:/data/sftp/%u/{upload,work}
- 权限示例:chown root:sftp /data/sftp/%u;chmod 755 /data/sftp/%u
- 可写目录:chown %u:sftp /data/sftp/%u/upload;chmod 755(或 775 视 umask/组协作而定)/data/sftp/%u/upload
- 常见现象与排查:出现 Permission denied 或 Broken pipe 多半是 chroot 路径或其上级目录的属主/权限不符合要求,按上述规则修正后再试。
三 网络与端口配置
- 默认端口为 22/TCP,建议仅对受信任来源开放;如使用 firewalld:
- 放行 SSH:firewall-cmd --permanent --zone=public --add-service=ssh && firewall-cmd --reload
- 如需新增端口(例如 22345/TCP):
- 在 /etc/ssh/sshd_config 中增加 Port 22345
- 若启用 SELinux,执行:semanage port -a -t ssh_port_t -p tcp 22345
- 在防火墙放行新端口并重启 sshd:firewall-cmd --permanent --add-port=22345/tcp && firewall-cmd --reload
- 变更配置前先语法检查并平滑重载:sshd -t && systemctl reload sshd;必要时再重启。
四 认证与登录体验优化
- 优先使用公钥认证(禁用密码或作为多因子之一),提升安全性与自动化能力。
- 若需限制可登录用户,可在 sshd_config 中使用 AllowUsers 或 AllowGroups 白名单控制。
- 登录后默认目录不可写时,可让用户在登录后自动进入可写子目录:
- 在用户级 Match 中加入:ForceCommand internal-sftp -d /upload(登录后直接进入 upload)。
五 变更验证与常见排错
- 配置语法与生效:
- 语法检查:sshd -t
- 平滑重载:systemctl reload sshd(重大变更再 restart)
- 服务状态:systemctl status sshd
- 日志排查:
- 关注 /var/log/secure 的登录失败原因(权限、用户、密钥、端口等)
- 高频问题速查:
- Permission denied:检查密码/密钥、以及 chroot 路径的属主与权限链是否满足“root 所有、不可组写”
- Broken pipe / Couldn’t read packet:多与目录权限或上级目录可写有关,按 chroot 规则修正
- Chroot 失败:确认 chroot 根及其上级目录均为 root:root 且权限不超过 755,并且用户对其可写目录仅存在于 chroot 内部