我必须处理“/etc/sudoers”中的一个无法更改的设置,因为所涉及的服务器由不同的团队管理,他们不想更改它。
我只有先使用 sudo 访问另一个帐户才能获得 root 访问权限。我的帐户只允许运行特定命令“sudo su - admin”(不能附加其他参数)。然后,作为用户“admin”,我可以使用 sudo 正常运行任何 root 命令(例如“sudo vi /etc/shadow”等)或使用“sudo -s”或“sudo su -”等打开 root shell。
我想从我控制的其他服务器上以 root 身份运行 Ansible 临时命令和剧本(例如“成为:是”),但这要求 Ansible 首先运行“sudo su - admin”,然后运行正常的“sudo”命令。
我知道您可以创建自定义的 become 方法。在我看来,这是解决这个问题的方法,但具体的解决方案超出了我的能力范围。有人能帮忙吗?
顺便说一句,如果有帮助的话,“/etc/sudoers”中为我的帐户和“管理员”都设置了“NOPASSWD:”。
答案1
以这种方式管理系统/自动化事情很困难。我真的没有直接的答案给你,但它可能是一个起点并给你一些想法。
假设远程服务器上的情况如下:
[root@node3 ~]# grep "gheo\|admin" /etc/sudoers
Defaults:admin !requiretty
Defaults:gheo !requiretty
gheo ALL=(ALL) NOPASSWD:/bin/su - admin
admin ALL=(ALL) NOPASSWD: ALL
玩:
---
- name: something
hosts: node3
vars:
maybe: "sudo su - admin <<EOF\nsudo su -"
tasks:
- name: check something
shell: "{{ maybe }}; sudo tail -1 /etc/shadow"
register: aa
- debug:
var: aa.stdout_lines
输出:
PLAY [something] *******************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [node3]
TASK [check something] *************************************************************************************************************************************************************************
[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo
changed: [node3]
TASK [debug] ***********************************************************************************************************************************************************************************
ok: [node3] => {
"aa.stdout_lines": [
"Last login: Sat Aug 8 01:05:16 CEST 2020",
"admin:!!:18481:1:90:7:::",
"Last login: Sat Aug 8 01:05:16 CEST 2020"
]
}
PLAY RECAP *************************************************************************************************************************************************************************************
node3 : ok=3 changed=1 unreachable=0 failed=0
不幸的是,我没有看到它对除 shell 模块或命令之外的任何东西起作用,我没有尝试过那个。
另一个选择(尽管我不知道它有多实用)是使用 ansible 在远程服务器上运行脚本。
[gheo@node3 ~]$ cat /home/gheo/bla.sh
#!/bin/sh
sudo su - admin <<EOF
sudo su -
tail -1 /etc/shadow
EOF
[gheo@mgt1 ~]$ ansible node3 -a "/home/gheo/bla.sh"
node3 | CHANGED | rc=0 >>
admin:!!:18481:1:90:7:::
Last login: Sat Aug 8 01:03:28 CEST 2020
Last login: Sat Aug 8 01:04:24 CEST 2020 on pts/2
您没有提到,但我认为您不能直接以“管理员”用户身份登录,如果可以的话会更容易。