Ansible “能用吗?”;sudo su-“;如果不允许sudo用户运行任意脚本?

Ansible “能用吗?”;sudo su-“;如果不允许sudo用户运行任意脚本?,ansible,sudo,Ansible,Sudo,我正在尝试使用Ansible在几个远程机器上自动化软件安装和设置。我在机器上的个人用户帐户已锁定,但我可以在手动登录时使用sudo su-成为root用户。一旦我是root用户,我就可以运行类似于yum-install-git和类似的命令 当我尝试通过Ansible执行此操作时,我尝试了以下方法来使用Ansible的yum模块: - name: install Git yum: name: git state: present become: yes become_m

我正在尝试使用Ansible在几个远程机器上自动化软件安装和设置。我在机器上的个人用户帐户已锁定,但我可以在手动登录时使用
sudo su-
成为root用户。一旦我是root用户,我就可以运行类似于
yum-install-git
和类似的命令

当我尝试通过Ansible执行此操作时,我尝试了以下方法来使用Ansible的
yum
模块:

- name: install Git
  yum:
    name: git
    state: present
  become: yes
  become_method: sudo
  become_user: root
  become_exe: "sudo su -"
当我运行此命令时,它失败了,错误是我的用户不允许运行该命令

sudo su - root /tmp/foobarbazblablabla
发生的情况是Ansible将所有的Yum命令放入一个临时脚本文件,然后尝试使用been方法/exe运行该脚本文件

事实证明,我的用户有权运行
sudo su-
,但不能使用
sudo
sudo su-
运行任意脚本,因此Ansible无法运行上述操作

我最终使用了这样一个丑陋的解决方法:

- name: install Git
  shell:
    cmd: |
      sudo su - <<EOF
      yum install -y git
      EOF
更新如果运行
sudo-l
,将显示:

User foo may run the following commands on this host:
    (root) /bin/kill
    (root) /bin/su - bar
    (root) su -
我想这会对你有用

- name: install Git
  yum:
    name: git
    state: present
  become: yes
  become_method: sudo
  become_exe: "sudo su - /bin/bash -c"

也许你把它复杂化了?这样试试看-

- name: install Git
  become: yes
  become_user: root
  yum:
    name: git
    state: present
或者最坏的情况是

- name: install Git
  become: yes
  become_user: root
  shell: yum install -y git

这有帮助吗?

我在
teamviewerpasswd
上遇到了类似的问题,这也不允许我使用
been:true
运行。此任务定义用于使用ansible设置teamviewer密码:

  - name: set teamviewer login to password only
    become: true
    become_method: sudo
    become_flags: 'su - root /bin/bash -c'
    command: 'teamviewer passwd {{ teamviewer_password }}'
这将运行:

sudo su - root /bin/bash -c 'teamviewer passwd Th3Passw0r8'

附带说明:如果使用
shell
-任务而不是
命令,则可以跳过
变成*
-的内容。但随之而来的是一个更糟糕的警告:用你的密码逃离地狱。不要去那里。

只需将此添加到剧本中:

become: yes
become_method: su
在主机服务器上运行playbook export Under env variable之前:

ANSIBLE_BECOME_EXE=’sudo su -‘

这是参考资料。

如果你发布了
sudo-l
它说了什么?我已经在问题中添加了
sudo-l
的输出。这篇文章说
ANSIBLE\u been\u EXE='sudo su-'
帮助我尝试过,结果是我的用户不允许运行
sudo su-/bin/bash
。我可以运行普通的
sudo su-
,但不能使用任何附加命令。询问我们的安全团队是否可以授予我运行
sudo su-/bin/bash
的权限以使这项工作正常进行可能是值得的…@nwinkler最终,如果他们锁定了您,那么允许
sudo su-
可能是一个意外。出于可审核性的原因,sudo总是比su好,因此如果他们阻止sudo的使用,那么允许
sudo su
似乎是无意的。@MillerGeek当ansible运行您的playbook时,将运行什么最终命令?这实际上是我尝试的第一件事,但由于上述错误而失败。您的第二个建议与我现在使用的类似,我将对
yum
的调用包装为一个显式的
sudo su-
调用,该调用很有效,但其缺点是不使用Ansible
yum
模块及其所有优点。。。
ANSIBLE_BECOME_EXE=’sudo su -‘