Ansible配置become_method=pbrun执行playbook权限错误如何解决
问题排查与解决方案
配置存在的核心问题
- 首先是pbrun策略不匹配:你司pbrun规则仅允许执行
/bin/su - couchbase和/bin/su - pbrun两个切换命令,你当前配置的/bin/su - enterprisedb不在白名单范围内,pbrun会直接拒绝该切换请求,导致用户切换流程不完整。 - 其次是Ansible临时文件权限不匹配:Ansible默认会用远程连接的初始用户在
/tmp目录下创建执行所需的临时文件,文件权限仅对初始用户开放,当切换用户流程异常时,目标用户enterprisedb没有权限读取初始用户创建的临时文件,就会触发权限拒绝报错。 - 最后是become参数配置逻辑错误:当
become_method设置为pbrun时,Ansible会自动拼接become_user参数生成执行命令,你直接把完整su命令写入become_flags会导致最终执行的pbrun命令格式异常,进一步加剧权限问题。
不修改pbrun规则的可行方案
如果你的业务需求是切换到白名单内的couchbase或pbrun用户执行操作,可以通过以下配置解决报错:
- 修正become配置,按照pbrun白名单配置参数:
become: yes become_method: pbrun become_user: root # 切换到couchbase就写以下参数,切换到pbrun则替换成对应的su命令 become_flags: '/bin/su - couchbase'
- 调整Ansible临时文件路径,避免全局目录权限冲突:
在ansible.cfg文件中添加以下配置,或者直接在playbook的vars段配置:
remote_tmp = ~/.ansible/tmp
该配置会让Ansible将临时文件生成在目标用户的家目录下,完全规避/tmp目录下的跨用户权限访问问题。
如果你的业务需求确实是切换到enterprisedb用户执行操作,由于该切换命令不在pbrun白名单内,不修改pbrun规则的前提下无法完成操作,必须先提交运维申请添加/bin/su - enterprisedb到pbrun白名单后再按上述步骤配置。
内容的提问来源于stack exchange,提问作者BeginnerSumB
相关产品推荐
相关产品推荐

