以编程方式为运行 ansible-playbook 创建 sudo 规则

问题描述

如何为 ansible-playbook 正在使用的所有可能命令创建一个列表,以便我可以创建一个 sudoers 文件

为了测试剧本,我暂时在 /etc/sudoers.d 中创建了一个条目:

tempuser ALL=(ALL:ALL) nopASSWD:ALL

但是有没有插件方法获取命令列表,以便我以后可以创建一个列表

tempuser ALL= nopASSWD:  /bin/systemctl start  mariadb.service
...

有什么想法吗?

解决方法

如果您打算通过 ansible 使用权限提升,那么 privilege escalation must be general

您不能限制某些命令的提权权限。 Ansible 并不总是使用特定的命令来做某事,而是从每次更改的临时文件名运行模块(代码)。如果您将‘/sbin/service’或‘/bin/chmod’作为允许的命令,这将因ansible而失败,因为这些路径与Ansible为运行模块而创建的临时文件不匹配。如果您的安全规则将 sudo/pbrun/doas 环境限制为仅运行特定的命令路径,请从没有此限制的特殊帐户中使用 Ansible,或使用 Red Hat Ansible Tower 来管理对 SSH 凭据的间接访问。>

如上述文档引用所示,这是该工具众所周知的限制。如果这是您环境中的问题,请查看文档引用中的上述解决方法,或者根本不使用 ansible。