tag tab practices create commits commands best git vagrant ansible sudo ansible-2.x

tab - git tags best practices



Ansible 2.1.0 utilizando Become/become_user no logra establecer permisos en el archivo temporal (2)

El problema es que www-data no puede acceder a los mismos archivos que creó su usuario no root y predeterminado que utiliza para conectarse a la máquina. Además, el mensaje de error apunta claramente a la documentación de ansible que describe las opciones que tiene para solucionar este problema al actualizar de ansible 2.0 o inferior.

Sugieren tres formas de solucionar adecuadamente el problema:

  • Utilice tubería. Cuando se habilita la canalización, Ansible no guarda el módulo en un archivo temporal en el cliente. En su lugar, canaliza el módulo a la entrada estándar del intérprete de python. La canalización no funciona para módulos que no sean de python.
  • Instale el soporte del sistema de archivos acl en el host administrado. Si el directorio temporal en el host remoto está montado con las acls del sistema de archivos habilitados y la herramienta setfacl está en la RUTA remota, Ansible utilizará las acls del sistema de archivos para compartir el archivo del módulo con el segundo sin privilegios en lugar de tener que hacer que todos puedan leer el archivo.
  • No realice una acción en la máquina remota convirtiéndose en un usuario sin privilegios. Los archivos temporales están protegidos por los permisos de archivos UNIX cuando se convierte en root o no se utilizan. En Ansible 2.1 y superior, los permisos de archivos de UNIX también son seguros si realiza la conexión a la máquina administrada como root y luego se utiliza para convertirse en una cuenta sin privilegios.

O si no puede realizar ninguna de estas correcciones, entonces puede forzar que se pueda ejecutar de una manera un poco más insegura (que parece ser la predeterminada en ansible 2 y en la parte inferior), que también debería solucionar su problema, pero no solucionaría el problema subyacente. riesgo de seguridad:

Si no puede realizar ninguno de los cambios anteriores para resolver el problema y decide que la máquina en la que se está ejecutando es lo suficientemente segura para que los módulos que desea ejecutar allí sean legibles en todo el mundo, puede activar allow_world_readable_tmpfiles en el ansible.cfg archivo ansible.cfg . La configuración de allow_world_readable_tmpfiles cambiará esto de un error a una advertencia y permitirá que la tarea se ejecute como lo hizo antes de 2.1.

Tengo un ansible 2.1.0 en mi servidor, donde realizo la implementación a través de vagrant y en la PC también. El rol "desplegar" tiene:

- name: upload code become: true become_user: www-data git: [email protected]:****.git dest=/var/www/main key_file=/var/www/.ssh/id_rsa accept_hostkey=true update=yes force=yes register: fresh_code notify: restart php-fpm tags: fresh_code

En este caso con ansible 2.1.0 me sale un error:

fatal: [default]: FAILED! => {"failed": true, "msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user. For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}

Como se puede ver en la versión 2.0.1.0 que utilizo en mi PC, es normalmente: folder / var / www / have carpeta main con propietario y grupo www-data

Si utilizo solo convertido_usuario: www-data y si uso become_modio: sudo con become_user: www-data - obtuve el mismo error

¿Qué hay que hacer para resolver esto?


En debian / ubuntu, puede resolver esto instalando primero el paquete acl en el host remoto, como con esta tarea imposible:

- name: install setfacl support become: yes apt: pkg=acl

Lo mismo con redhat / centos: instale el paquete acl en el host remoto:

- name: install setfacl support become: yes yum: name=acl