Apache Zookeeper未授权访问漏洞

漏洞验证:
执行以下命令即可远程获取该服务器的环境:
echo envi|nc 192.168.15.74 2181

zookeeper有三个端口(可以修改),默认端口作用:
1、2181:对cline端提供服务
2、3888:选举leader使用
3、2888:集群内机器通讯使用(Leader监听此端口)

修复办法一(需要改程序)-- Zookeeper ACL权限配置及zkclient
方式一:
1)增加一个认证用户
addauth digest 用户名:密码明文
举例:
addauth digest user1:password1
2)设置权限
setAcl /path auth:用户名:密码明文:权限
setAcl /path digest:用户名:密码密文:权限
举例:
setAcl /test auth:user1:password1:cdrwa
3)查看Acl设置
getAcl /path

'digest,'user1:gMM5lnLQm2ZS+DRkBasbNQFb7Cw=
cdrwa
  1. 回退
    setAcl / world:anyone:cdrwa

zkclient增加ACL权限:

    ZkClient client = new ZkClient(url.getBackupAddress());

    /**
     * 增加Zookeeper的ACL控制选项
     */
    if (!StringUtils.isEmpty(url.getUsername()) && !StringUtils.isEmpty(url.getPassword())) {
        StringBuffer auth = new StringBuffer(url.getUsername())
                .append(":").append(url.getPassword());
        client.addAuthInfo("digest", auth.toString().getBytes());
    }

    return client;
}

ZK的节点有5种操作权限:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

权限 描述 setAcl中的简写
write 能够设置znode的值 w
read 能够读取znode的值和列出它的children znode r
create 能够创建children znode c
delete 能够删除children znode d
admin 能够执行setAcl即设置访问控制列表 a
all 所有权限 wrcda

修复办法二 zookeeper创建ip白名单
格式:setAcl 路径 ip:xxx.xxx.xxx.xx1:cdrwa,ip:xxx.xxx.xxx.xx2:cdrwa
例如:setAcl /zkaa ip:127.0.0.1:cdrwa,ip:10.111.134.6:cdrwa
恢复:setAcl / world:anyone:cdrwa

修改办法三(推荐) 防火墙策略
iptables -I INPUT -s 172.16.65.0/24 -p tcp --dport 2181 -j ACCEPT
iptables -A INPUT -p tcp --dport 2181 -j DROP
允许172.16.65开头的ip 访问2181端口 ,其余ip不可访问2181 端口
查看防火墙:
iptables -nvL

作者:zhuchunyan_aiji
链接:https://www.jianshu.com/p/95a69a4c1691
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(apache,zookeeper,分布式)