Ansible: 두 번 되기

Ansible: 두 번 되기

나는 다음과 같이 Ansible을 실행하고 싶습니다.

  • 원격 사용자는 '일반' 사용자입니다.

  • ... 많은 작업을 실행하기 위해 become루트를 사용하는 사람은 누구입니까?sudo

  • ... 루트에서 PostgreSQL 데이터베이스를 생성하는 becomepostgres 사용자는 누구입니까 ?su - postgres

su이는 PostgreSQL 세계의 일반적인 절차입니다. 를 통해서만 액세스할 수 있는 특수 사용자입니다 root.

CLI 옵션이 플레이에 정의된 모든 항목을 재정의하므로 플레이에서 be-ish 매개변수를 지정하는 것은 루트로 연결할 때만 작동합니다.

sudo규칙을 추가하거나 실행하는 것 외에 이를 달성하는 더 우아한 방법이 있습니까?

command: /usr/bin/su - postgres -c '/bin/createuser -D -R -S myuser

ansible에서 경고를 종료하라고 말합니까?

답변1

유효 사용자를 두 번 변경해야 하는 이유는 무엇입니까?

작업별로 ansible을 실행해야 하는 유효 사용자 ID를 지정할 수 있으므로 postgres 사용자로 명령을 실행해야 하는 경우 이를 직접 설정하세요.

tasks:
  - name: Create Postgres User
    shell: /bin/createuser -D -R -S myuser
    become: yes
    become_user: postgres

사용자가 sudo권한을 얻을 때 root이미 권한을 얻고 권한을 ALL부여받는 경우가 많습니다.어느postgres를 포함한 사용자.

대안으로, ansible 사용자가 postgres 사용자로서 (특정) 명령을 실행할 수 있도록 추가 sudo 권한을 생성하십시오.

메모: Ansible Postgres 사용을 고려해보세요.데이터베이스 모듈데이터베이스, 역할 및 권한을 관리합니다.


귀하의 의견에 대한 답변: 저는 일반 사용자로서 Ansible에 연결합니다.

ansible example -a "/bin/whoami"
example | SUCCESS | rc=0 >>
hbruijn

/etc/sudoers.d/hbruijn나(내 Ansible 사용자)가 수행할 수 있는 작업에 어떠한 제한도 두지 않는 매우 일반적인 " " 스니펫이 있습니다 .

# /etc/sudoers.d/hbruijn
hbruijn  ALL = NOPASSWD: ALL

그러면 난 할 수 있어become모든 사용자는 호출 sudo하거나 su먼저 호출하지 않고 다른 사용자 ID 및 작업으로 명령을 실행할 수 있습니다.

ansible example -b --become-user=root  -a "/bin/whoami"
example | SUCCESS | rc=0 >>
root

또는:

ansible example -b --become-user=postgres  -a "/bin/whoami"
example | SUCCESS | rc=0 >>
postgres

Ansible이 수퍼유저로 직접 연결하지 않고도 모두 가능합니다.

답변2

postgres기본적으로 루트 블록의 사용자 에 대한 작업을 실행해야 합니다 . 아래와 같은 예:

pb.yml

- hosts: testingserver
  gather_facts: false
  tasks:
    - name: this is me without become
      command: whoami

    - name: this is my sudo `root` block
      become: true
      block:
        - name: checking who I am
          command: whoami

        - name: this is me becoming `postgres`
          become_user: postgres
          command: whoami

산출:

$ ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inven pb.yml -K -v
BECOME password:

PLAY [testingserver] ***********************************************************************************************************************************************************************************************

TASK [this is me without become] ***********************************************************************************************************************************************************************************
changed: [testingserver] => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"}, "changed": true, "cmd": ["whoami"], "delta": "0:00:00.006233", "end": "2023-07-05 11:01:57.229844", "msg": "", "rc": 0, "start": "2023-07-05 11:01:57.223611", "stderr": "", "stderr_lines": [], "stdout": "testinguser", "stdout_lines": ["testinguser"]}

TASK [checking who I am] *******************************************************************************************************************************************************************************************
changed: [testingserver] => {"changed": true, "cmd": ["whoami"], "delta": "0:00:00.006191", "end": "2023-07-05 11:01:57.964360", "msg": "", "rc": 0, "start": "2023-07-05 11:01:57.958169", "stderr": "", "stderr_lines": [], "stdout": "root", "stdout_lines": ["root"]}

TASK [this is me becoming `postgres`] *************************************************************************************************************************************************************************
changed: [testingserver] => {"changed": true, "cmd": ["whoami"], "delta": "0:00:00.003580", "end": "2023-07-05 11:01:58.768622", "msg": "", "rc": 0, "start": "2023-07-05 11:01:58.765042", "stderr": "", "stderr_lines": [], "stdout": "postgres", "stdout_lines": ["postgres"]}

PLAY RECAP *********************************************************************************************************************************************************************************************************
testingserver               : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

이것은 귀하의 경우에 따른 내 Linux 박스 환경입니다.

  • 일반 사용자가 테스트 중입니다.
  • postgres에 대한 일반 사용자 su에는 비밀번호가 필요합니다.
  • 일반 사용자 루트로 sudo
  • su를 postgres로 루트
$ ssh testingserver
[testinguser@testingserver ~]$ su - postgres
Password:
[testinguser@testingserver ~]$ sudo -i
[sudo] password for testinguser:
[root@testingserver ~]# su - postgres
[postgres@testingserver ~]$ whoami
postgres

관련 정보