gpt4 book ai didi

Ansible非root sudo用户和 "become"权限提升

转载 作者:行者123 更新时间:2023-12-02 17:45:10 32 4
gpt4 key购买 nike

我已经为具有 sudo 权限的用户 david 设置了一个盒子。我可以通过 ssh 进入盒子并执行 sudo 操作,例如 apt-get install 。当我尝试使用 Ansible 的“成为权限升级”执行相同的操作时,我收到权限被拒绝错误。因此,一个简单的剧本可能如下所示:

simple_playbook.yml:

---
- name: Testing...
hosts: all
become: true
become_user: david
become_method: sudo

tasks:
- name: Just want to install sqlite3 for example...
apt: name=sqlite3 state=present

我使用以下命令运行此剧本:

ansible-playbook -i inventory simple_playbook.yml --ask-become-pass

这会提示我输入密码,我给出了密码,然后收到以下错误(缩写):

fatal: [123.45.67.89]: FAILED! => {...
failed: E: Could not open lock file /var/lib/dpkg/lock - open (13:
Permission denied)\nE: Unable to lock the administration directory
(/var/lib/dpkg/), are you root?\n", ...}

为什么我的权限被拒绝?

其他信息

我正在运行 Ansible 2.1.1.0,目标是 Ubuntu 16.04。如果我按照 Ansible < v1.9 使用 remote_usersudo 选项,它可以正常工作,如下所示:
远程用户:大卫
须藤:是的

更新

本地和远程用户名相同。为了使其正常工作,我只需要指定become: yes(请参阅@techraf的答案):

最佳答案

Why am I getting permission denied?

因为 APT 需要 root 权限(请参阅错误:您是 root 吗?)并且您正在以 david 身份运行任务。

根据这些设置:

become: true
become_user: david
become_method: sudo

Ansible 使用 sudo 方法变成 david。它基本上运行其Python脚本,前面有sudo david

<小时/>

the user 'david' on the remote box has sudo privileges.

这意味着david可以使用sudo可执行文件执行命令(部分或全部)来更改子进程(命令)的有效用户。如果未给出用户名,则此进程将以 root 帐户运行。

比较这两个命令的结果:

$ sudo whoami
root
$ sudo david whoami
david
<小时/>

回到 APT 问题,您(从 CLI)以及 Ansible(使用您的帐户通过 SSH 连接)需要运行:

sudo apt-get install sqlite3

不是:

sudo david apt-get install sqlite3

这将失败并显示 Ansible 非常准确的消息。

<小时/>

以下 playbook 将默认升级到 root 用户:

---
- name: Testing...
hosts: all
become: true

tasks:
- name: Just want to install sqlite3 for example...
apt: name=sqlite3 state=present

关于Ansible非root sudo用户和 "become"权限提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983674/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com