sudo 两次成为 Ansible 的方法

sudo 两次成为 Ansible 的方法

我必须处理“/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

您没有提到,但我认为您不能直接以“管理员”用户身份登录,如果可以的话会更容易。

相关内容