在具有共享 NFS 挂载的服务器上运行 playbook
Posted
技术标签:
【中文标题】在具有共享 NFS 挂载的服务器上运行 playbook【英文标题】:Run playbook on servers with shared NFS mount 【发布时间】:2016-04-21 20:24:57 【问题描述】:我有以下 Ansible playbook 可以跨集群进行包更新:
- 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 上运行控制器,而不是带有共享/安装驱动器的服务器的控制器。
【问题讨论】:
【参考方案1】:知道了。需要将 remote_tmp = /tmp/.ansible 添加到我的 ansible.cfg 文件中。见这里Ansible config parameters 瞧!
问题是当 Ansible 执行 sudo 时,root 帐户不是 NFS 挂载共享上的用户帐户。
【讨论】:
【参考方案2】:引用 RHEL 6 安全指南:
"默认情况下,NFS 共享将 root 用户更改为 nfsnobody 用户, 非特权用户帐户。这将更改所有根创建的所有者 文件到 nfsnobody,这会阻止使用 setuid 位设置。如果使用 no_root_squash [option],则远程 root 用户 能够更改共享文件系统上的任何文件并离开 其他用户无意中被木马感染的应用程序 执行。”
换句话说,这是一种默认且安全的 NFS 行为。
【讨论】:
以上是关于在具有共享 NFS 挂载的服务器上运行 playbook的主要内容,如果未能解决你的问题,请参考以下文章
linux下nfs客户机挂载服务器上的共享目录时,出现权限不够的错误,怎么解决?
如何使用 autofs 在 IPA 服务器上挂载 NFS 共享