我有一台服务器,我的用户可以在不使用密码的情况下对root用户进行sudo,然后root用户可以在不使用密码的情况下对第三个用户进行sudo。但是,我的用户无法在没有密码的情况下直接对第三个用户进行sudo。 >我已经尝试将become_user: root放在该块上,并将become_user: <other-user>放在该块内的任务上,但是Ansible似乎覆盖了该块的定义,而不是像我希望的那样嵌套sudo调用。也曾在StackOverflow上被问过,但是由于没有解决方案,我想我会在这里重新发布它,我认为这是一个更好的网站。

评论

我的用户无法在没有密码的情况下直接向第三个用户sudo-是在ansible下还是直接在shell中?

@DanCornilescu通常根据sudoers配置。

也许将sudo“ sudo -u target_user命令”作为命令?

@Xiong Chiamiov,您找到适合您的解决方法了吗?我有完全一样的问题:(

#1 楼

我遇到了同样的情况。我的机器有login1,无密码sudo和login2,我应该在其中执行一些操作。我没有用解决的办法解决它。但是我做了这样的解决方法:

- name: "Install nvm"
  shell: sudo -u buildkite-agent bash -c "<my commands to be performed on behalf of buildkite-agent>"
  become: true


这种情况: buildkite-agent的家,即使用/root作为家。

#2 楼

在游戏级别成为超级用户,在任务级别成为另一个用户:

- hosts: all
  become: yes
  tasks:

    - file:
        path: /tmp/test
        state: touch
      become_user: www-data


验证:

$ ls -l /tmp | grep test
-rw-r--r-- 1 www-data www-data    0 Mär 10 14:08 test


对于非常简单的情况,类似以下的变通方法也可能会有所帮助,但这并不能真正扩展,因为您无法通过此策略使用ansible模块: >输出(摘录):"stdout": "www-data"

评论


我尝试了您的第一个建议(以及类似的带有块的内容),但是Ansible似乎覆盖了命令,而不是嵌套命令(因此,它本质上将sudo -u root替换为sudo -u www-data,而不是嵌套到创建sudo -u root sudo -u www-data)。我认为使用命令/ shell进行手动调整以及使用文件模块仔细许可是目前在Ansible中唯一可行的方法。

–熊佳亚诺夫
18-3-12在21:37



@XiongChiamiov,很奇怪,对我有用(如从ls -l / tmp命令可以看到的)。我正在使用ansible 2.4.2.0。但是,您没有ansible_user的无密码sudo吗?

–文森佐·皮(Vincenzo Pii)
18年3月13日在12:27

ansible_user对根帐户具有无密码的sudo,但对第三级帐户(在您的示例中为www-data)没有。

–熊佳亚诺夫
18年3月19日在16:36

#3 楼

我所做的对我有用:
- name: launch pg_ctl start
  command: "su <USER> -l -c '<COMMAND>'"
  become: yes
  become_exe: sudo

PS:使用su -l时,它将自动加载.bash_profile而不是.bashrc

#4 楼

例如,您要创建一个文件,可以使用:

 name: Create file
 shell: "touch abc"
 become_user: <username>
 become: yes


这等效于::
sudo su username -c“ touch abc”

评论


不,它等效于“ sudo -u用户名”,正如问题中所述,该名称稍有不同但很重要。

–熊佳亚诺夫
18年3月12日在16:47

当您运行上述Ansible时,文件abc将由username变量中提到的用户创建

–user7155093
18 Mar 12 '18 at 17:05

是的,但是您缺少问题的要点,那就是sudoers配置不允许默认的ansible用户直接对最终用户进行sudo。

–熊佳亚诺夫
18年3月12日在21:33