【问题标题】:Unable to run Ansible with sudo user无法使用 sudo 用户运行 Ansible
【发布时间】:2019-01-18 15:41:13
【问题描述】:

我们在服务器上有一个用户userA 可以访问sudo。我可以登录服务器并运行sudo su - userA 以切换到新用户。但是,如果我使用 Ansible,它会抛出以下错误:

致命:[node1]:失败! => {"changed": false, "module_stderr": "与 node1 的共享连接已关闭。\r\n", "module_stdout": "\r\n抱歉,不允许用户 abc 执行 '/bin/sh -c echo BECOME-SUCCESS-pzwmlpcvzvwafleunmvpwioi; /usr/bin/python /var/tmp/ansible-tmp-1533926060.36-184244176073120/setup.py' 作为 node1 上的 userA。\r\n", "msg": "MODULE FAILURE", “rc”:1}

Ansible 文件:

---
- hosts: all
  become: yes
  become_user: userA
  become_method: sudo
  tasks:
      - name: Create file
        command: touch /home/userA/testing

我们无权访问 sudoers 文件。有没有办法在不更改 sudoers 文件的情况下解决这个问题?

【问题讨论】:

    标签: linux shell ansible ansible-2.x


    【解决方案1】:

    我取决于...如果 sudoers 配置允许运行 /usr/bin/su - userA*(末尾有一个通配符允许 -c 参数),那么您可以通过以下方式将 become-configuration 添加到您的任务中:

    - name: Create file
      command: touch /home/userA/testing
      vars:
        ansible_become: true
        ansible_become_method: su
        ansible_become_user: userA
        ansible_become_exe: 'sudo -p "Password: " su -'
    

    如果 sudoers 需要密码,则必须运行 ansible-playbook 并带有 --ask-become-pass (-K) 选项并连接用户密码(如 sudo)。

    前三个参数可以直接写成task/play的参数。


    否则,您可能注定要运行 expect 模块(可能在控制器机器上)而存在所有缺点。

    【讨论】:

    • 感谢您的回复@techraf。但是,我们的服务器不允许我们运行任何 su 命令。我们能够使用 tts 实现这是 java。有没有办法在 ansible 中做到这一点?
    • 请阅读您自己的问题:“我可以登录服务器并运行sudo su - userA”。
    • 没错,它允许我运行sudo su - userA,但不能运行/bin/sh -c。如果我使用与您建议的语法相同的语法,则会向我抛出此错误fatal: [node1]: FAILED! => {"msg": "Timeout (12s) waiting for privilege escalation prompt: "}
    【解决方案2】:

    您可以在要与用户B 的用户A 一起运行的文件上设置UID chmod u+s file。例如,/usr/bin/passwd 是具有 SetUID 的根文件,因此,任何用户都可以在以 root 身份运行 /usr/bin/passwd 时更改自己的密码(使用 passwd 命令)。

    ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
    passwd
    Changing password for user user.
    Changing password for user.
    (current) UNIX password: 
    

    【讨论】:

    • 它是如何回答问题的?
    • 你是对的,现在不行。即在编辑问题后,当我回答问题时,问题没有 Ansible 文件和声明没有 sudoers 文件访问权限的免责声明。请参阅修订版 - (stackoverflow.com/posts/51796405/revisions)。
    • 我从一开始就看到问题是“有没有办法在不更改 sudoers 文件的情况下解决这个问题?”。
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2019-01-14
    • 2017-02-14
    相关资源
    最近更新 更多