
나는 다음과 같이 Ansible을 실행하고 싶습니다.
원격 사용자는 '일반' 사용자입니다.
... 많은 작업을 실행하기 위해
become
루트를 사용하는 사람은 누구입니까?sudo
... 루트에서 PostgreSQL 데이터베이스를 생성하는
become
postgres 사용자는 누구입니까 ?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