Запуск плейбука на серверах с общим монтированием NFS

У меня есть следующий 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, а не на контроллерах с сервера с общим/подключенным диском.


person horcle_buzz    schedule 21.04.2016    source источник


Ответы (2)


Понятно. Нужно добавить remote_tmp = /tmp/.ansible в мой файл ansible.cfg. См. здесь параметры конфигурации Ansible Вуаля!

Проблема в том, что когда Ansible выполняет sudo, учетная запись root НЕ является учетной записью пользователя в смонтированных общих ресурсах NFS.

person horcle_buzz    schedule 21.04.2016

Цитата из руководства по безопасности RHEL 6:

«По умолчанию общие ресурсы NFS меняют пользователя root на пользователя nfsnobody, непривилегированную учетную запись пользователя. Это меняет владельца всех файлов, созданных root, на nfsnobody, что предотвращает загрузку программ с установленным битом setuid. Если no_root_squash [опция] используется, удаленные пользователи root могут изменять любой файл в общей файловой системе и оставлять приложения, зараженные троянами, для непреднамеренного запуска другими пользователями».

Другими словами, это безопасное поведение NFS по умолчанию.

person ILIV    schedule 01.12.2017