Ansible:成为两次

Ansible:成为两次

我想运行 ansible 以便:

  • 远程用户是“普通”用户

  • ... 谁become是 root viasudo来运行一堆任务

  • ... who 的becomepostgres 用户通过su - postgres,从 root 身份,创建 PostgreSQL 数据库。

su这是 PostgreSQL 世界的典型程序:只能通过from访问的特殊用户root

在剧中指定 become-ish 参数仅当以 root 身份连接时才有效,因为 CLI 选项会覆盖剧中定义的任何内容。

除了添加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。

或者,创建额外的 sudo 权限,以便您的 ansible 用户可以以 postgres 用户身份执行(特定)命令。

笔记:考虑使用 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任何用户都可以以不同的用户 ID 和任务执行命令,而无需先调用sudosu

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在根块中为用户运行任务。示例如下:

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 环境:

  • 普通用户是测试用户
  • 普通用户 su 到 postgres 需要密码
  • 普通用户 sudo 到 root
  • root 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

相关内容