我有以下Ansible手册来跨群集进行包更新:
- hosts: cluster
become: true
become_user: root
tasks:
- name: updates a server
apt: update_cache=yes
- name: upgrade a server
apt: upgrade=full
当我运行它时,作为NFS控制器的节点执行得很好,但在主目录上具有NFS挂载的两个节点失败,并出现以下错误:
$ansible-playbook upgrade-servers.yml -K
SUDO password:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
fatal: [nej-worker2]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "\r\n/usr/bin/python: can't open file '/home/gms/.ansible/tmp/ansible-tmp-1461269057.4-144211747884693/setup': [Errno 13] Permission denied\r\n", "msg": "MODULE FAILURE", "parsed": false}
ok: [iznej]
fatal: [nej-worker1]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "\r\n/usr/bin/python: can't open file '/home/gms/.ansible/tmp/ansible-tmp-1461269057.4-16590584976890/setup': [Errno 13] Permission denied\r\n", "msg": "MODULE FAILURE", "parsed": false}
TASK [updates a server] ********************************************************
ok: [iznej]
TASK [upgrade a server] ********************************************************
changed: [iznej]
NO MORE HOSTS LEFT *************************************************************
PLAY RECAP *********************************************************************
iznej : ok=3 changed=1 unreachable=0 failed=0
nej-worker1 : ok=0 changed=0 unreachable=0 failed=1
nej-worker2 : ok=0 changed=0 unreachable=0 failed=1
我在共享上运行pip
时遇到类似问题,修复程序是使用--set-build
重定向构建目录...我假设这是Ansible的问题,因为它是在NFS控制器上工作,而不是具有共享/挂载驱动器的服务器。
答案 0 :(得分:4)
知道了。需要将remote_tmp = /tmp/.ansible添加到我的ansible.cfg文件中。见Ansible config parameters瞧!
问题是当Ansible执行sudo时,root帐户不是NFS挂载共享上的用户帐户。
答案 1 :(得分:0)
引用RHEL 6安全指南:
“默认情况下,NFS共享将root用户更改为nfsnobody用户,即 无特权的用户帐户。这会更改所有root创建的所有者 文件到nfsnobody,阻止上传程序 setuid位设置。如果使用no_root_squash [option],则为远程root用户 能够更改共享文件系统上的任何文件并离开 应用程序感染特洛伊木马的其他用户无意中 执行“。
换句话说,这是一种默认的安全NFS行为。