centos sftp配置安全性如何提升
导读:CentOS SFTP 安全性提升清单 一 基础加固 使用internal-sftp并强制仅 SFTP:在 /etc/ssh/sshd_config 设置 Subsystem 为 internal-sftp,并对需要隔离的用户用 Matc...
CentOS SFTP 安全性提升清单
一 基础加固
- 使用internal-sftp并强制仅 SFTP:在 /etc/ssh/sshd_config 设置 Subsystem 为 internal-sftp,并对需要隔离的用户用 Match Group 限制,启用 ForceCommand internal-sftp,同时关闭 AllowTcpForwarding 与 X11Forwarding,减少攻击面。
- 禁用 root 登录与密码登录:设置 PermitRootLogin no;在密钥可用后设置 PasswordAuthentication no、PubkeyAuthentication yes,仅保留公钥认证。
- 限制可登录用户:通过 AllowUsers / DenyUsers 白名单/黑名单精确控制账户。
- 目录与权限模型(满足 Chroot 要求):Chroot 根目录必须由 root 拥有且不可写,为用户创建可写子目录(如 uploads),避免用户逃逸到上层目录。
- 审计与监控:将 LogLevel 调为 VERBOSE,持续审计 /var/log/secure 的登录与会话记录。
二 认证与访问控制
- 使用SSH 密钥认证(优先 Ed25519 或 RSA 4096):客户端生成密钥,将公钥放入用户的 authorized_keys 并设置权限 600/700;在服务器侧禁用密码登录。
- 集中托管公钥(可选,便于运维与隔离):将用户公钥放入 /etc/ssh/sftp-keys//authorized_keys,由 root 拥有,避免用户修改;在 Match 块中通过 AuthorizedKeysFile 指定该路径。
- 精细化访问控制:按用户或用户组使用 Match 定向策略(仅 SFTP、禁用端口转发、限制目录);必要时用 AllowUsers / DenyUsers 做名单控制。
三 网络与端口安全
- 防火墙仅放行必要来源:使用 firewalld 仅开放 22/TCP(或变更后的端口)并对可信网段放行;云环境同步配置安全组。
- 更改默认端口(可选,降低噪音攻击):将 Port 22 改为 1024–65535 的未使用端口,并在 firewalld 放行新端口;如启用 SELinux,执行 semanage port -a -t ssh_port_t -p tcp < 新端口> 。
- 防暴力破解:部署 Fail2ban,启用 [sshd] 监狱对多次失败登录的 IP 自动封禁。
四 目录权限与 SELinux 要点
- 推荐的目录结构:将 Chroot 根(如 /srv/sftp 或 /data/sftp)属主设为 root:root、权限 755/700;为用户创建可写子目录(如 uploads)并属主为相应用户,避免 Chroot 根可写导致会话失败或越权。
- SELinux 场景:若启用 SELinux 且 chroot 内无法写入,启用布尔值 ssh_chroot_rw_homedirs on,或用 semanage fcontext / restorecon 修复上下文。
五 快速配置示例
- 目标:创建 sftpusers 组,用户 sftpuser 仅能 SFTP 访问 /srv/sftp/sftpuser,可写目录为 uploads;仅公钥登录;日志详细;firewalld 放行 22/TCP;Fail2ban 保护 SSH。
- 步骤(可直接复用,按需替换路径与端口):
# 1) 安装与启动
sudo yum install -y openssh-server fail2ban
sudo systemctl enable --now sshd fail2ban
# 2) 创建用户与目录(Chroot 根不可写,子目录可写)
sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /bin/false sftpuser
sudo mkdir -p /srv/sftp/sftpuser/uploads
sudo chown root:root /srv/sftp /srv/sftp/sftpuser
sudo chmod 755 /srv/sftp /srv/sftp/sftpuser
sudo chown sftpuser:sftpusers /srv/sftp/sftpuser/uploads
sudo chmod 755 /srv/sftp/sftpuser/uploads # 可按需设为 775 并配合 umask/ACL
# 3) 配置公钥(客户端生成后将公钥内容追加到 authorized_keys)
sudo mkdir -p /home/sftpuser/.ssh
sudo tee /home/sftpuser/.ssh/authorized_keys <
<
'EOF'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ... sftpuser@client
EOF
sudo chown -R sftpuser:sftpusers /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
# 4) 配置 sshd_config(建议先备份)
sudo tee -a /etc/ssh/sshd_config <
<
'EOF'
# 仅启用 internal-sftp
Subsystem sftp internal-sftp
# 全局安全基线
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
X11Forwarding no
AllowTcpForwarding no
GatewayPorts no
UsePAM yes
# SFTP 专用组策略
Match Group sftpusers
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
GatewayPorts no
# 详细日志便于审计
LogLevel VERBOSE
EOF
# 5) SELinux(如启用)
sudo setsebool -P ssh_chroot_rw_homedirs on # 若 chroot 内需要写入
# 6) 防火墙放行 22/TCP(如变更端口,同步修改并重载 firewalld)
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --reload
# 7) 重启并验证
sudo systemctl restart sshd
ss -tnlp | grep :22
sudo fail2ban-client status sshd
# 客户端测试:sftp sftpuser@your_server
- 变更端口示例(可选):将 Port 22 改为 4422,执行
sudo firewall-cmd --permanent --zone=public --add-port=4422/tcp & & sudo firewall-cmd --reload
sudo semanage port -a -t ssh_port_t -p tcp 4422
并在 sshd_config 中新增 Port 4422,重启 sshd。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos sftp配置安全性如何提升
本文地址: https://pptw.com/jishu/785568.html
