无法使用 sudo 用户运行 Ansible

问题描述 投票:0回答:3

我们在服务器上有一个用户

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

致命:[节点1]:失败! => {"changed": false, "module_stderr": "与node1的共享连接已关闭。 ", "module_stdout": " 抱歉,不允许用户 abc 执行 '/bin/sh -c echo BECOME-SUCCESS-pzwmlpcvzvwafleunmvpwioi; /usr/bin/python /var/tmp/ansible-tmp-1533926060.36-184244176073120/setup.py' 作为节点 1 上的 userA。 ", "msg": "模块故障", "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
3个回答
2
投票

我取决于...如果 sudoers 配置允许运行

/usr/bin/su - userA*
(末尾有一个通配符允许
-c
参数),那么您可以通过以下方式将成为配置添加到您的任务中:

- 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
相同)。

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


否则你可能注定要运行

expect
模块(可能在控制器机器上)并带来所有缺点。


0
投票

您可以在用户 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: 

0
投票

如果您尝试以其他用户身份运行命令,您可以尝试以下操作:

  • 成为:是
  • 成为_用户:用户A
  • ansible_become_pass:用户A
© www.soinside.com 2019 - 2024. All rights reserved.