8.11. 使用 Ansible playbook 来确保 IdM 客户端上 IdM 用户的 sudo 访问权限
在身份管理(IdM)中,您可以确保对特定命令的sudo
访问权限被授予给特定 IdM 主机上的 IdM 用户帐户。
完成此流程以确保名为 idm_user_reboot 的 sudo
规则存在。该规则授予 idm_user 在 idmclient 机器上运行 /usr/sbin/reboot
命令的权限。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.14 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您已 确保 IdM 中存在 idm_user 用户帐户,并通过为用户创建密码解锁了帐户。有关使用命令行界面添加新 IdM 用户的详情,请参考链接:使用命令行添加用户 。
-
idmclient 中没有本地 idm_user 帐户。idm_user 用户未列在 idmclient 上的
/etc/passwd
文件中。
步骤
创建一个清单文件,如
inventory.file
,并在其中定义ipaservers
:[ipaservers] server.idm.example.com
添加一个或多个
sudo
命令:创建一个
ensure-reboot-sudocmd-is-present.yml
Ansible playbook,以确保在sudo
命令的 IdM 数据库中存在/usr/sbin/reboot
命令。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudocmd/ensure-sudocmd-is-present.yml
文件中的示例:--- - name: Playbook to manage sudo command hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure sudo command is present - ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" name: /usr/sbin/reboot state: present
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
创建引用命令的
sudo
规则:创建一个
ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
Ansible playbook,其使用sudo
命令条目来确保存在 sudo 规则。sudo 规则允许 idm_user 重新启动 idmclient 机器。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudorule/ensure-sudorule-is-present.yml
文件中的示例:--- - name: Tests hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure a sudorule is present granting idm_user the permission to run /usr/sbin/reboot on idmclient - ipasudorule: ipaadmin_password: "{{ ipaadmin_password }}" name: idm_user_reboot description: A test sudo rule. allow_sudocmd: /usr/sbin/reboot host: idmclient.idm.example.com user: idm_user state: present
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
验证步骤
通过验证 idm_user 能够使用 sudo
重新启动 idmclient,来测试您在 IdM 服务器上已确认存在的 sudo
规则可以在 idmclient 上正常工作。请注意,服务器上所做的更改可能需要几分钟才能在客户端上生效。
- 以 idm_user 用户身份登录到 idmclient。
使用
sudo
重新启动计算机。在提示时输入 idm_user 的密码:$ sudo /usr/sbin/reboot [sudo] password for idm_user:
如果正确配置了 sudo
,则机器将重新启动。
其他资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-sudocmd.md
,README-sudocmdgroup.md
和README-sudorule.md
文件。