在银河麒麟V10 SP3安全三级加固环境下,需通过SSH IP白名单(AllowUsers ops@IP)与sudo命令级授权协同实现“仅指定IP可提权”闭环控制,禁用密码认证、禁止root远程登录,并采用drop-in方式管理SSH配置。

在银河麒麟V10 SP3安全三级加固环境下,系统默认禁用root远程登录、关闭密码认证、启用PAM账户锁定,此时普通运维人员即使持有sudo权限,也无法从非可信IP发起提权操作——因为sudo本身不校验来源IP,而SSH层已将连接源头过滤掉。必须让SSH放行特定IP,再配合sudo规则精准授权,才能实现“仅该IP可提权”的闭环控制。
第一步:确认当前SSH服务状态与配置路径
执行systemctl is-active sshd验证服务运行中;若返回inactive,先启动systemctl start sshd并设为开机自启systemctl enable sshd。银河麒麟V10 SP3服务器版默认使用OpenSSH 8.0p1,主配置文件为/etc/ssh/sshd_config,但生产环境强烈建议使用drop-in方式管理加固项,避免直接修改主配置导致升级冲突。
第二步:限制SSH仅允许指定运维IP建立连接
创建独立配置片段:sudo tee /etc/ssh/sshd_config.d/10-allow-ops-ip.conf <<'EOF'
AllowUsers ops@192.168.10.45 ops@10.200.5.12
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
EOF
注意:【AllowUsers必须写成“用户名@IP”格式,不能只写IP或只写用户】。这里假设运维账号名为ops,两个常用办公网段IP分别为192.168.10.45和10.200.5.12。若需支持IPv6,必须显式写出完整地址如ops@2001:db8::1,通配符*在此处无效。
重载SSH配置:sudo systemctl reload sshd。此时除上述两个IP外,任何其他地址尝试SSH连接都会被拒绝,连登录界面都看不到。
第三步:为该运维账号配置免密sudo提权(仅限本机命令)
执行sudo visudo -f /etc/sudoers.d/90-ops-privilege,插入以下内容:
ops ALL=(ALL) NOPASSWD: /usr/bin/systemctl start nginx, /usr/bin/systemctl restart mysql, /bin/journalctl -u sshd -n 50
这一行明确限定ops用户只能执行三个具体命令,且无需输入密码。禁止使用/bin/bash等宽泛权限,否则等保测评时会被判定为“权限过度授予”直接扣分。
验证是否生效:从192.168.10.45机器以ops用户SSH登录后,执行sudo systemctl status nginx应立即返回结果;若从192.168.10.46登录同一账号,执行相同命令会提示Sorry, user ops is not allowed to execute '/usr/bin/systemctl status nginx' as root on localhost.
第四步:强制绑定运维账号的SSH密钥与主机指纹
进入/home/ops/.ssh/目录,检查authorized_keys文件是否仅包含该运维人员本人的公钥。删除所有其他密钥行。然后执行:
sudo ssh-keygen -H -F 192.168.10.45 → 若返回空,说明该IP未被哈希记录,需手动添加;
echo "192.168.10.45 ssh-rsa AAAAB3NzaC1yc2E... ops-workstation" | sudo tee -a /etc/ssh/known_hosts
这一步确保当该IP主动发起SSH连接时,服务端能校验其公钥指纹,防止IP欺骗后套用合法密钥绕过限制。银河麒麟V10 SP3的OpenSSH默认启用HostbasedAuthentication no,所以此操作属于主动加固补位,非必需但推荐。
第五步:审计日志中隔离记录该IP的所有提权行为
编辑/etc/audit/rules.d/99-ops-sudo.rules,添加:
-a always,exit -F arch=b64 -S execve -F uid!=0 -F auid>=1000 -F key=ops_sudo
-a always,exit -F arch=b32 -S execve -F uid!=0 -F auid>=1000 -F key=ops_sudo
加载规则:sudo augenrules --load,再重启auditd:sudo systemctl restart auditd。此后所有ops用户执行sudo命令的行为,都会在/var/log/audit/audit.log中打上key="ops_sudo"标签,便于后续用ausearch -k ops_sudo快速提取完整操作链。

















