无法使用 sudo 用户运行 Ansible



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

致命: [节点 1]: 失败! => {"已更改": 假, "module_stderr": ">

与节点 1 的共享连接已关闭。\r", "module_stdout": "\r对不起,用户 abc 不被允许执行 '/bin/sh -c echo become-SUCCESS-pzwmlpcvzvwafleunmvpwioi;/usr/bin/python/var/tmp/ansible-tmp-1533926060.36-184244176073120/setup.py' 作为 node1 上的用户 A。\r", "msg": "模块故障", "rc": 1}

文件:

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

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

我取决于...如果 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 需要密码,则必须使用--ask-become-pass(-K(选项和连接用户的密码(如sudo(运行ansible-playbook

前三个参数可以直接作为参数写入任务/播放。


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

您可以对要从用户 B 与用户 A 一起运行的文件进行 SetUIDchmod u+s file。例如,/usr/bin/passwd 是一个具有 SetUID 的根文件,因此,任何用户都可以在以 root 身份运行/usr/bin/passwd 时更改自己的 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: 

最新更新