PrestoDB配置用户和密码验证

张开发
2026/4/7 7:26:34 15 分钟阅读

分享文章

PrestoDB配置用户和密码验证
使用PrestoDB的时候无论是JDBC方式还是Presto CLI方式都可以携带user/--user 与 password/--password参数而对于密码本身来讲在默认情况下PrestoDB是不验证有效性的。PrestoDB有两种密码验证的方式一种是基于自身的一个密码文件另一种是基于LDAP。个人建议如果你不是对LDAP服务特别了解或者所处公司环境没有专业的安全部门在运维LDAP服务的话你就使用第一种密码文件的方式就行要注意用户密码想要生效投入实际使用对于presto来讲需要你对外提供服务时使用SSL端口也就是说需要公司内部安全部或者运维人员配置把普通的HTTP端口用防火墙保护起来不然别人不用SSL链接就可以不用密码那就乱套了Presto的SSL服务自身会强制用户带密码并校验。当然自己内部测试阶段可以用SSLfalse和HTTP端口通信自己搭建测试集群的话端口安全方面通常是用iptables放行集群节点网段访问http端口因为节点之间的心跳这些还是访问默认协议端口# 1. 清理可能存在的旧规则可选谨慎使用# sudo iptables -D INPUT -p tcp --dport 8881 -j ACCEPT 2/dev/null# sudo iptables -D INPUT -p tcp --dport 8881 -j DROP 2/dev/null# 2. 添加范围允许规则注意范围只能是同一网段的注意主机位需要写为0因为识别的时候是拿原ip和原网络掩码做按位与运算sudoiptables-AINPUT-ptcp--dport8881-miprange --src-range192.168.10.50-192.168.10.100-s192.168.0.0/16-jACCEPT# 3. 保存规则永久生效sudoserviceiptables save 通过如下命令查看规则是否添加成功sudoiptables-LINPUT-n--line-numbers|grep8881使用密码文件这种使用方式运维精力是最省事的你只需要更改主节点上的etc/config.properties文件中写如下的配置http-server.authentication.typePASSWORD随后创建etc/password-authenticator.properties文件写如下内容password-authenticator.namefile file.password-file密码文件的绝对路径比如/path/to/password.db file.auth-token-cache.max-size1000这个是presto缓存密码的个数不需要每次都查密码文件默认是1000个然后准备这个密码文件密码文件包含用户名和密码的列表每行一个用冒号分隔。密码必须使用 bcrypt 或者 PBKDF2安全哈希建议使用 bcrypt 一来是更安全二来是有现成的工具yuminstallhttpd-tools然后运行下面的命令会提示你输入原始密码然后会生成bcrypt 格式的密码-n意思是不用更新文件的方式来执行最终结果会输出在标准输出也就是console-B就是选择bcrypt 类型-C是密码成本prestodb最低要求bcrypt 格式密码的成本为8不要低于这个限制test是目标用户如果不用-n用户前就要跟上密码文件会自动更新htpasswd-nBC10testhtpasswd-B-C10password.dbtest最终就是下面的样子[rootnode3 etc]# htpasswd -B -C 10 password.db testNew password: Re-type new password: Adding passwordforusertest[rootnode3 etc]# cat password.dbtest:$2y$10$15neYgdbnDWVs0DdveFwruIKzFM7q5UquUxVmoxb3Ql0ad5eWuiKa配置之后客户端连接就需要带密码了./presto\--serverhttps://服务主节点:SSL端口号\--catalogcatalog\--schemaschema\--userLDAP user\--password\--truststore-path 受信证书\--truststore-password password使用LDAP服务LDAP是一种基于X.500标准的轻量级目录访问协议其实就是用户身份是否存在的一个外置验证插件。prestodb本身配置起来不复杂ldap服务的验证方式最麻烦的时候如何获取受信任证书而且还是能用的。抛开这个难点你只需要把LDAP服务的证书导入到PrestoDB主节点默认的Java受信库中keytool-import-trustcacerts\-aliasldap_server\-file/path/to/ldap_server.crt\-keystore$JAVA_HOME/jre/lib/security/cacerts\-storepasschangeit 命令含义 keytool-import-trustcacerts\-aliasldap_server\# 给证书起个别名便于管理不过建议和官方文档里面的一样-file/path/to/ldap_server.crt\# 你获取到的证书文件路径-keystore$JAVA_HOME/jre/lib/security/cacerts\# Java默认信任库路径-storepasschangeit# 默认信任库密码你要没改过的话就都是这个随后在PrestoDB主节点的config.properties文件中追加配置http-server.authentication.typePASSWORD随后在PrestoDB的etc路径下建一个名字叫password-authenticator.properties的配置文件追加如下内容password-authenticator.nameldap#这个是ldap服务地址ldap.urlldaps://node1:389#这个是向LDAP服务认证时的用户识别名称也就是dn${USER}会在执行时被替换为user参数传递来的信息ldap.user-bind-patternuid${USER},ouusers,dctest,dccom之后做个测试首先在LDAP服务上准备一个用户u1[rootnode1 etc]# ldapaddgroup g1Successfully added group g1 to LDAP[rootnode1 etc]# ldapadduser u1 g1Successfully added user u1 to LDAP[rootnode1 home]# ldappasswd -x -D cnadmin,dctest,dccom -W -S uidu1,ouusers,dctest,dccomNew password: 这里写u1用户的密码 Re-enter new password: 确定u1用户密码 Enter LDAP Password: 这里写admin管理用户的密码改密码需要指定你的身份-x不使用默认的身份认证-D指定你的身份-W隐式输入自己的密码-S隐式输入用户的新密码随后保障PrestoDB配置已经重启生效使用客户端执行下面的命令注意keystore* 或者 truststore* 带一对就行./presto\--serverhttps://服务主节点:SSL端口号\--keystore-path ldap服务的受信证书\--keystore-password password\--truststore-path ldap服务的受信证书\--truststore-password password\--catalogcatalog\--schemaschema\--userLDAP user\--password最后如果涉及到用户密码更改文件方式可能会有一点点延迟不过一般是感受不到的如果实在不更新就重启服务不过经过测试这种概率很小一般都是改完基本就生效了LDAP的不需要担心延迟问题因为那个LDAP服务的数据改了就生效了

更多文章