Autorizzazione negata in Ansible synchronize module


4

Sto usando Ansible, tra le altre cose, per scopi di backup. io corro ansible-playbook con un non root utente (diciamo che lo è user ) e ssh come user. Dopo di ciò, ho impostato l'escalation dei privilegi per diventare root su ogni server. Fino ad ora, nessun problema.

Per recuperare una directory remota ho qualcosa di equivalente alla seguente regola:

- synchronize:
  mode: pull
  delete: true
  src: "{{ dir }}/"
  dest: "{{ tank_base }}/{{ inventory_hostname }}/{{ dir }}/"
  rsync_opts:
    - "--exclude=tmp*"
    - "--exclude=~*"
    - "--exclude=*~"
    - "--exclude=.gvfs/"
    - "--exclude=.cache/"

ma per alcune sottodirectory fornisce il seguente errore (leggermente modificato per nascondere i dati personali):

fatale: [server]: FAILED! = & Gt; {"changed": false, "cmd": "/ usr / bin / rsync --delay-updates -F --compress --delete-after --archive --rsh 'ssh -S none -o StrictHostKeyChecking = no' --exclude = tmp * --exclude = ~ * --exclude = * ~ --exclude = .gvfs / --exclude = .cache / --out-format = '& lt; & gt;% i% n% L' \ "server: / var / backup / \" \ "/ var / tank / snapshot / server / backup / \" "," failed ": true," msg ":" rsync: opendir \ "/ var / backup / sottodir \ "fallito: Permesso negato (13) Errore \ nrsync: alcuni file / attrs non sono stati trasferiti (vedi errori precedenti) (codice 23) su main.c (1650) [generator = 3.1.2] \ n", "rc" : 23}

La sottodirectory che fallisce ( /var/backup/subdir nel caso precedente) è di proprietà di root:root ed è leggibile / scrivibile solo dal proprietario. La mia ipotesi è rsync sta cercando di tirare i file come user invece di root.

Come posso tirare quelle directory senza compromettere la sicurezza e possibilmente senza modificare nulla sul lato server? Dopo tutto l'escalation dei privilegi è già in atto e funzionante.

Risposte:


2

Dopo tutto l'escalation dei privilegi è già in atto e funzionante.

Non esattamente - synchronize modulo funziona rsync localmente sulla macchina di gestione, non sul nodo di destinazione (per il quale si imposta l'escalation dei privilegi). Documentazione del modulo lo descrive in dettaglio (un estratto sotto):

  • L'utente e le autorizzazioni per la sincronizzazione src sono quelli dell'utente che esegue l'operazione Ansible sull'host locale (o il file remote_user per un delegate_to ospite quando delegate_to viene usato).

  • L'utente e le autorizzazioni per la sincronizzazione dest sono quelli del remote_user sull'host di destinazione o sul become_user Se become=yes è attivo.

Quindi sta accedendo alla tua cartella sorgente ( server:/var/backup/ nell'esempio) come user non root.


Se non si richiede la password per user a sudo sul computer di destinazione (o semplicemente configurarlo in questo modo per il rsync comando) che puoi usare delegate_to: <your_server> parametro combinato con rsync_path="sudo rsync" per eseguirlo esplicitamente con sudo.


Non conosco gli interni ansibili: speravo in sync il modulo potrebbe eseguire il tunneling del traffico riutilizzando la connessione già stabilita invece di crearne una nuova. Scaverò di più sul delegate_to itinerario...
ntd

1

In Ansible 2.2.1.0 questo ha funzionato per me:

- synchronize:
    mode: pull
    src: "/home/vagrant/dir1"
    dest: "/my_linux/dir1"
    recursive: yes
    delete: no
    times: yes

... e con questo inventario (da usare ansible_ssh_private_key_file var):

[vagrant1]
192.168.77.4

[vagrant1:vars]
ansible_user=vagrant
ansible_ssh_private_key_file="/Users/Chilcano/.vagrant.d/insecure_private_key"

Spero che ti aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.