CentOS SFTP用户管理实操指南
一 基础准备与安装
- 安装 OpenSSH 服务(如未安装):执行命令:sudo yum install -y openssh-server。
- 启动并设置开机自启:sudo systemctl start sshd && sudo systemctl enable sshd。
- 确认服务与端口:检查状态 sudo systemctl status sshd;默认端口 22。
- 防火墙放行(firewalld):sudo firewall-cmd --permanent --add-service=ssh && sudo firewall-cmd --reload。
- 建议准备专用用户组(如 sftpusers)用于统一管理 SFTP 账户。
二 创建用户与目录规范
- 创建 SFTP 组:sudo groupadd sftpusers。
- 创建用户(示例:sftpuser1):
- 交互式创建家目录:sudo useradd -m -G sftpusers sftpuser1 && sudo passwd sftpuser1。
- 或禁止 Shell 登录(更安全):sudo useradd -s /sbin/nologin -M sftpuser1 && sudo passwd sftpuser1。
- 目录与权限规范(chroot 要求):
- 将用户根目录(chroot 目录)属主设为 root:root,权限 755/750:
- 示例:sudo chown root:root /home/sftpuser1 && sudo chmod 755 /home/sftpuser1。
- 在根目录下为上传创建可写子目录(如 upload),并归属用户:
- 示例:sudo mkdir -p /home/sftpuser1/upload && sudo chown sftpuser1:sftpusers /home/sftpuser1/upload && sudo chmod 755 /home/sftpuser1/upload。
- 说明:chroot 根目录及其上级目录必须由 root 拥有,且不可对“其他”开放写权限,否则 SFTP 会拒绝登录。
三 配置 SSHD 限制为仅 SFTP 并启用日志
- 编辑配置文件:sudo vi /etc/ssh/sshd_config。
- 启用 internal-sftp 并限制用户组(推荐按组管理):
- 按用户精确限制(可选):将 Match Group sftpusers 替换为 Match User sftpuser1。
- 启用 SFTP 日志(便于审计):
- 在 Match 段加入:ForceCommand internal-sftp -l INFO -f local5
- 在 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf 增加:auth,authpriv.,local5. /var/log/sftp.log
- 重启服务:sudo systemctl restart sshd && sudo systemctl restart rsyslog
- 注意:修改后使用 sshd -t 检查语法,再重启,避免锁死。
四 常用运维操作
- 新增用户:重复“创建用户与目录规范”,保持 chroot 根目录为 root:root,可写目录归属相应用户。
- 禁用/删除用户:
- 锁定账户:sudo usermod -L sftpuser1;解锁:sudo usermod -U sftpuser1。
- 删除用户及家目录:sudo userdel -r sftpuser1。
- 变更用户组:追加附加组时使用 -a 防止脱离原组:sudo usermod -aG sftpusers sftpuser1。
- 公钥认证(免密):
- 客户端生成密钥:ssh-keygen -t rsa -b 2048;将公钥(如 id_rsa.pub)追加到服务器对应用户的 ~/.ssh/authorized_keys。
- 目录与权限:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys。
- 连接测试:sftp sftpuser1@your_server_ip;失败请查看 /var/log/secure 或 /var/log/sftp.log。
五 故障排查与加固要点
- 常见报错与修复:
- “Broken pipe / Connection reset by peer”多与 chroot 目录权限有关:确保 chroot 根目录及其上级目录属主为 root,权限 755/750,且路径上目录不可对“其他”可写。
- “Permission denied”:检查用户家目录、可写子目录属主与权限;确认 SELinux 未阻止访问。
- SELinux 处理(如启用):
- 启用家目录支持:sudo setsebool -P sftp_home_dir on;
- 修正上下文(示例):sudo chcon -Rv ‘system_u:object_r:sshd_home_t:s0’ /home/sftpuser1。
- 安全加固清单:
- 仅允许 SFTP:保持 ForceCommand internal-sftp,并关闭 AllowTcpForwarding / X11Forwarding / PermitTunnel。
- 禁止 Shell 登录:将 SFTP 用户 Shell 设为 /sbin/nologin 或 /bin/false。
- 最小权限:chroot 根目录 root:root 755/750;可写目录单独授权给用户。
- 日志与监控:启用 internal-sftp -l INFO -f local5 与 rsyslog 输出至 /var/log/sftp.log,定期审计。
- 防火墙:仅放通 22 端口(或指定 IP/网段)。