【问题标题】:Ansible sudo root hopAnsible sudo root hop
【发布时间】:2017-06-28 12:32:19
【问题描述】:

我的问题是:

由于使用 root 用户通过 ssh 连接到远程计算机通常被视为一种不好的做法,因此我使用特定的非特权帐户连接到服务器。

但对我来说,以 root 用户身份执行所有操作也是一种不好的做法。我更喜欢尽可能使用应用程序用户。

使用 ansible 我可以成为 root 并使用 become 指令执行特权命令。但是有没有办法成为任何具有root 'hop' 权限升级的用户?

即, ssh 与 ssh-user => 成为 root => 成为任何其他用户

我看到的其他方式并不完全让我满意:

  • 成为 root,使用 cmd 模块并使用 su(它会显示以下已弃用的消息 [WARNING]: 请考虑使用 'become'、'become_method' 和 'become_user' 而不是运行 su):

    cmd: su -c "my_command" app_user become: True become_user: root

  • 为我的 ssh 用户添加 sudoers 权限,直接成为所有应用用户

我是否错过了一些更整洁的方法?

【问题讨论】:

    标签: security ansible privileges sudoers


    【解决方案1】:

    您可以使用 --ask-become-pass 选项运行您的剧本,例如:

    ansible-playbook -i ../inventories/production.ini service_install.yml --ask-become-pass

    在您的库存中,这里称为 production.ini,为 ansible 组添加您的信息用户:

    [group1]
    182.26.5.159
    182.26.5.160
    182.26.5.161
    ...
    [group1:vars]
    ansible_connection=ssh
    ansible_user=appuser                                   # insert your app user here
    ansible_ssh_pass=passuser                              # insert your pass here
    

    然后您可以加密您的库存文件以保密您的密码,并将解密密码提供给您的 OP/系统管理员团队

    ansible-vault 加密 ../inventories/production.in

    最后保留的命令是:

    ansible-playbook -i ../inventories/production.ini service_install.yml --ask-become-pass --ask-vault-pass

    然后在你的游戏中,你只需要用户“成为:是”选项来调用你的任务:

    cmd: "my_command" app_user
    become: yes
    

    【讨论】:

    • 感谢您提供详细信息,事实上,这几乎是我使用的(我使用 ssh 密钥连接),但正如我所说,不推荐在命令模块中使用 su,这就是我寻找其他解决方案的原因。
    • 好的,我想这是一个很好的解决方案,但这意味着在任何用户中授予您的 ssh 用户对 sudo 的权限。我想这并不重要......
    【解决方案2】:

    我刚刚编辑了我的答案,任务已更正。通常它应该在没有“su”的情况下工作。

    cmd: "my_command" app_user 变为:是

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 2017-02-04
      相关资源
      最近更新 更多