我们在服务器上有一个用户userA
,该用户有权访问sudo
。我可以登录服务器并运行sudo su - userA
切换到新用户。但是,如果我使用Ansible,则会使我陷入错误:
致命:[node1]:失败! => {“已更改”:false,“ module_stderr”:“与节点1的共享连接已关闭。\ r \ n”,“ module_stdout”:“ \ r \ n对不起,不允许用户abc执行'/ bin / sh -c以nodeA的用户身份回显BECOME-SUCCESS-pzwmlpcvzvwafleunmvpwioi; / usr / bin / python /var/tmp/ansible-tmp-1533926060.36-184244176073120/setup.py'作为userA。\ r \ n“,” 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文件?
答案 0 :(得分:0)
您可以在要与用户A一起从用户B运行的文件上使用SetUID chmod 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:
答案 1 :(得分:0)
我依赖...如果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
模块(可能在控制器计算机上)而具有所有缺点。