运维跳板机权限管控,最小权限安全原则:运维跳板机权限管控
跳板机权限管控的核心目标,是让每个运维人员只能访问自己工作必需的服务器和命令,不多给一丝权限。
最小权限安全原则不是一句口号,而是通过账号隔离、密钥限制、sudo白名单和文件ACL一层层收紧的实操过程。
下面从零开始,手把手配置一台基础的跳板机。
一、环境准备与账号规划
假设你有一台干净的 Linux 跳板机(CentOS 7/8 或 Ubuntu 20.04+),以及若干台后端业务服务器。
目标是:运维人员只能通过跳板机登录后端,且只能执行特定命令。
先创建专用账号,不要直接用 root 操作。
# 创建运维用户组
sudo groupadd ops
# 创建用户 alice,并加入 ops 组
sudo useradd -m -s /bin/bash -G ops alice
# 设置密码
sudo passwd alice
后端服务器同样创建 alice 账号,并设置相同的 UID(方便权限统一),或者通过 LDAP 统一认证。
这里以本地账号为例。
关键点:跳板机和后端服务器上的用户名必须一致,否则后续 SSH 免密和 sudo 规则无法直接复用。
二、SSH 密钥与登录限制
密码登录容易暴力破解,跳板机必须改用密钥认证,并禁止 root 直接登录。
在 alice 的客户端生成密钥对:
ssh-keygen -t ed25519 -C "alice@jump"
将公钥上传到跳板机:
ssh-copy-id alice@jump-server-ip
然后在跳板机 /etc/ssh/sshd_config 中修改:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowGroups ops
重启 SSH 服务:
sudo systemctl restart sshd
验证方式:用 alice 私钥登录成功,用 root 或密码登录被拒绝。
三、用 sudo 白名单限制命令
最小权限的核心是:即使登录成功,也不能随便执行 rm -rf / 或 su。
通过 sudo 只放行必要命令。
编辑 /etc/sudoers 使用 visudo:
sudo visudo -f /etc/sudoers.d/ops
添加如下内容(允许 alice 重启 nginx 和查看日志,但不能改配置):
Cmnd_Alias WEB_CMDS = /bin/systemctl restart nginx, /bin/systemctl status nginx, /usr/bin/tail -f /var/log/nginx/*.log
alice ALL=(root) NOPASSWD: WEB_CMDS
避坑:命令必须写绝对路径,且不能包含通配符 *,否则可能被绕过。
例如 /bin/systemctl restart nginx* 会允许 nginx; rm -rf / 这类注入。
验证方式:alice 执行 sudo systemctl restart nginx 成功,执行 sudo cat /etc/shadow 被拒绝。
四、文件与目录的 ACL 控制
有些场景需要共享目录,但不想给整个组写权限。
用 ACL 精细控制。
例如,让 alice 对 /data/logs 只读,对 /data/tmp 可写:
sudo setfacl -m u:alice:r-x /data/logs
sudo setfacl -m u:alice:rwx /data/tmp
查看 ACL:
getfacl /data/logs
注意:ACL 依赖文件系统挂载参数 acl,如果 mount 输出中没有 acl,需要修改 /etc/fstab 并重新挂载。
五、操作审计与登录日志
权限收紧后,还要能追溯谁做了什么。
跳板机至少要记录 SSH 登录和 sudo 操作。
查看登录记录:
last -f /var/log/wtmp
查看 sudo 日志:
sudo journalctl -u sudo
# 或
grep sudo /var/log/auth.log
进阶方案是使用 auditd 记录命令执行:
sudo auditctl -a always,exit -F arch=b64 -S execve -F uid=1001 -k alice_cmds
然后通过 ausearch -k alice_cmds 查看 alice 执行过的所有命令。
验证方式:alice 执行几条命令后,ausearch 能完整列出。
常见问题
跳板机需要给开发人员 root 权限吗?
不需要。开发人员通常只需要查看日志、重启服务、部署代码。用 sudo 白名单精确放行即可,绝对不要给 ALL 权限。
后端服务器如何限制只能从跳板机登录?
在后端服务器的 sshd_config 中加上 AllowUsers alice@跳板机IP,或者用防火墙只允许跳板机 IP 访问 22 端口。
sudo 规则改了不生效怎么办?
检查 /etc/sudoers 中是否用 #includedir /etc/sudoers.d 包含了你的文件,以及文件权限是否为 0440。
用户反映命令找不到?
sudo 默认使用安全路径,可能不包含 /usr/local/bin。可以在 sudoers 中设置 secure_path 或在命令中使用绝对路径。
最后检查一遍
完成以上步骤后,用 alice 账号实际登录跳板机,尝试以下操作:
- 直接 SSH 后端服务器(应成功,但只能执行允许的命令)
- 执行
sudo su -(应被拒绝) - 执行
sudo cat /etc/shadow(应被拒绝) - 执行
sudo systemctl restart nginx(应成功) - 查看
/var/log/auth.log确认操作被记录
如果全部符合预期,说明最小权限原则已经初步落地。
后续可以根据业务需要,逐步增加更细粒度的规则,但始终记住:每多给一条权限,就多一个风险点。