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 elansible.cfg
archivoansible.cfg
. La configuración deallow_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