Назад | Перейти на главную страницу

sudo дважды становится методом для Ansible

Мне приходится иметь дело с настройкой в ​​"/ etc / sudoers", которую я не могу изменить, потому что рассматриваемые серверы управляются другой командой, и они не хотят ее менять.

У меня есть root-доступ, только сначала sudoing к другой учетной записи. Моя учетная запись может выполнять только определенную команду «sudo su - admin» (дополнительные аргументы не могут быть добавлены). Затем, как пользователь «admin», я могу запускать любые корневые команды обычно с помощью sudo (например, «sudo vi / etc / shadow» и т. Д.) Или открывать корневую оболочку с помощью «sudo -s» или «sudo su -», и т.п.

Я хочу запускать специальные команды и плейбуки Ansible от имени пользователя root (например, «стать: да») на этих серверах с другого сервера, который я контролирую, но для этого потребуется, чтобы Ansible сначала запускал «sudo su - admin», а затем запускал обычная команда "sudo".

Я знаю, что вы можете создавать собственные методы. Мне кажется, это способ решить эту проблему, но конкретное решение мне не по силам. Может кто-нибудь помочь с этим?

Кстати, если это помогает, «NOPASSWD:» устанавливается как для моей учетной записи, так и для «admin» в «/ etc / sudoers».

Так сложно управлять системами / автоматизировать. На самом деле у меня нет для вас прямого ответа, но это может быть отправной точкой и дать вам несколько идей.

Предполагая следующее на удаленном сервере:

[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

К сожалению, я не вижу, чтобы это работало ни с одним другим модулем оболочки или, возможно, командой, я не пробовал.

Другой вариант, хотя я не знаю, насколько он практичен, - использовать 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

Вы не упомянули, но я предположил, что вы не можете напрямую войти в систему как «администратор», было бы проще, если бы вы могли.