使用Ansible在sudoers文件中具有有限授权的无密码sudo

时间:2019-12-21 22:16:41

标签: linux ansible

我正在实施一本小手册,以将一些apt-packages安装到我的机器上,例如码头工人,git。

这是一个示例任务:

- name: "Docker: install various dependencies"
  become: true
  tags:
    - docker_installation
  apt:
    #  force_apt_get: true # didnt help
    name: "apt-transport-https, ca-certificates, curl, software-properties-common"
    update_cache: true
    state: present

由于我想使用无密码sudo,因此在将执行剧本任务的目标主机上创建了专用用户 ansible 。我试图实现的目的是,仅允许ansible用户执行剧本所需的命令 ,而无需输入密码。

因此,我如下编辑sudoers文件(仅显示非默认值):

root    ALL=(ALL:ALL) ALL
ansible ALL=(root) NOPASSWD: /usr/bin/apt-cache, /usr/bin/apt-get update install, /usr/bin/apt

当我以ansible身份在目标主机上ssh时,可以按预期执行与apt相关的命令,而无需提示输入密码。但是,当我执行剧本时,它失败并显示:

  

升级需要密码

fatal: [elk-dummy]: FAILED! => {
"msg": "Missing sudo password"
}

当我将sudoers条目更改为

ansible ALL=(root) NOPASSWD: ALL

一切正常。

看着这个related post,我希望从日志中获取一些信息,但是我不知道如何处理此消息/原因:

  

<192.168.2.35>为用户建立SSH连接:可访问

     

<192.168.2.35> SSH:EXEC ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60s -o KbdInteractiveAuthentication = no -o PreferredAuthentications = gssapi-with-mic,gssapi-keyex,基于主机的公钥-o PasswordAuthentication = no -o'User =“ ansible”'-o ConnectTimeout = 10 -o ControlPath = / home / lukas / .ansible / cp / 0e1063962c 192.168.2.35'/ bin / sh -c'“'”'chmod u + x /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/ /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/AnsiballZ_command.py && sleep 0'“'”''< / p>      

<192.168.2.35>为用户建立SSH连接:可访问

     

<192.168.2.35> SSH:EXEC ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60s -o KbdInteractiveAuthentication = no -o PreferredAuthentications = gssapi-with-mic,gssapi-keyex,基于主机的公钥-o PasswordAuthentication =否-o'User =“ ansible”'-o ConnectTimeout = 10 -o ControlPath = / home / lukas / .ansible / cp / 0e1063962c -tt 192.168.2.35'/ bin / sh -c'“'”'sudo -H -S -n -u root / bin / sh -c'“'”'“”“”“”“”“” / usr / bin / python3 /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/AnsiballZ_command.py'“'”'“'”“”“”“”“ && sleep 0'”' “”

我已经看过apt-module的python代码,寻找将要为apt-module执行的其他命令,但我找不到任何命令。

在实现这一目标方面的任何帮助都非常感谢!

我正在运行ansible版本2.9.2。目标主机在Ubuntu服务器18.04上运行。

1 个答案:

答案 0 :(得分:1)

  

Q:“当我将sudoers条目更改为ansible ALL=(root) NOPASSWD: ALL时,一切正常。”

A:引用Privilege escalation must be general

  

“您不能将特权升级权限限制为某些命令...”