etcd 未授权漏洞修复
更新时间: 2024-12-31 17:26:48
阅读 347
背景
万象的元数据存储中心 etcd集群并未开启登陆校验,理论上所有客户都可以在网络连通的情况下,获取和篡改etcd中的数据。即需要开启etcd的安全认证,对etcd的所有访问都需要一个用户名和密码进行操作。
场景
当客户要求etcd授权时,才需要进行操作。
注意
本次修改需要有手动维护操作,如果你的万象版本页面没有手动维护按钮的话,请升级到新版本后再进行授权。
影响
授权期间,万象暂时不管控 操作时间10分钟
授权步骤
1.开启手动维护状态
确保集群状态为正常
确保服务状态为可用
点击手动维护并确定 (⚠️:别点成主从切换了)
检查是否成功开启手动维护
集群状态和服务状态均为手动维护状态
2.查找任意一台可以操作的etcd节点 。进入etcd 容器内部
可以操作的判断标准
docker exec -it mysql-paas-etcd /bin/bash #进入etcd容器
etcdctl get --prefix /cluster
# 上面或者下面这条语句可以执行成功 获取到数据即为可以操作的标准 。把ip 换成你的ip不是硬写 。
# 端口是部署的时候yaml端口,或者查看容器配置,里面的端口
etcdctl --endpoints=ip:2379 get --prefix /cluster
# 记住你可以操作成功的语法形式 也就是需不需要 '--endpoints=ip:2379',不需要时 ,下列有关etcd操作 便不需要加
3.创建etcd root用户 (在可以操作的etcd机器节点上,执行一次即可)
# ip 指本机ip
docker exec -it <etcd containerId> /bin/bash
etcdctl --endpoints=ip:2379 role add root # 输出Role root created 即位创建成功
etcdctl --endpoints=ip:2379 user add root:ntes_rds_etcd_kv_123 # 如果访问出现上下文超时的报错语句,删除'--endpoints=ip:2379'后重新执行即可
# 出现User root created 即为创建成功
etcdctl --endpoints=ip:2379 user grant-role root root #输出 Role root is granted to user root 即为成功
4.开启etcd 认证
docker exec -it <etcd containerId> /bin/bash
etcdctl --endpoints=ip:2379 auth enable
# 校验 再次执行
etcdctl --endpoints=ip:2379 get --prefix /cluster
# 无法获取数据.
5.启动etcd认证的用户和密码(所有manager 容器)
docker exec -it <manager containerId> /bin/bash
cd /
vi startup.py
# 将startup.py 文件第三十行的
将 ETCD_AUTH = environ("ETCD_AUTH", bool, True)
修改为
ETCD_AUTH = True
# 3.5 以上的版本使用 ETCD_AUTH = "true"
# 保存退出后。重启manager 容器
查看manager 是否在线。在线即成功。 (你的万象版本可能没有下列页面,那只需要刷新manager页面,可以看到集群信息也认为授权成功)
如果有多个manager 重复执行即可
6.启动etcd认证的用户和密码 (所有node容器)
docker exec -it <node containerId> /bin/bash
cd /
vi startup.py
# 将startup.py 文件第59行的
将 ETCD_AUTH = environ("ETCD_AUTH", bool, True)
修改为
ETCD_AUTH = True
# 3.5 以上的版本使用 ETCD_AUTH = "true"
# 保存退出文件后,在node容器内部执行下列语句
pgrep -f agent|xargs kill -9
查看页面 agent 在线即修改成功
7.取消手动维护
取消手动维护状态
等待3秒左右,刷新页面
检查集群状态正常
检查服务状态可用
文档反馈
以上内容对您是否有帮助?