Concedi le autorizzazioni utente a tutti i file e cartelle


9

Voglio avere un utente che abbia accesso a tutti i file e le cartelle sul sistema. Questo ha lo scopo di utilizzare RSYNC su un computer locale per eseguire il backup di un computer remoto.

Al momento stiamo usando l'utente backupse sebbene abbiamo aggiunto questo utente ai gruppi sudoe adminrsync restituisce ancora messaggi come:

rsync: opendir "/ location / to / folder" non riuscito: autorizzazione negata (13)

rsync: send_files non è riuscito ad aprire "/ location / to / file": autorizzazione negata (13)

Qualunque idea di come backupsautorizziamo l'utente ad accedere a tutto (a meno di aggiungere l'utente a tutti i gruppi di sempre - il server remoto che stiamo tentando di eseguire il backup è un server di hosting dedicato in cui ogni account ha il proprio utente sul sistema).

Grazie per qualsiasi aiuto.


1
Puoi dare esempi di percorsi? Se è presente /proc, /devecc. , Allora ci si devono aspettare errori.
Phil

aggiungi utente backupsa sudoe adminnon modificare nulla.
favadi

@Phil Sto cercando di eseguire il backup dell'intera directory / home. I file / directory che falliscono sono quelli /home/a/c/account/users/mail:usernameche hanno autorizzazioni simili drwx------e di proprietà di mail:4096. Presumo che perché l'utente backupsè nel gruppo sudoo adminnon ha accesso perché non ci sono autorizzazioni di accesso per i gruppi? Non lo so, ma è un errore su cartelle / file del genere.
Thomas Clayson,

@favadi L'ho già fatto ... ancora non funziona.
Thomas Clayson,

Dovrai eseguire il rsynccomando con sudo.
Phil

Risposte:


6

La semplice aggiunta dell'utente backupsal gruppo di utenti sudonon consente automaticamente all'account di accedere a tutti i file sul sistema. Dà all'utente il permesso di eseguire il sudocomando.

Dal momento che stai utilizzando l'autenticazione con chiave pubblica (presumibilmente senza passphrase), mi avvicinerei a questo con la sicurezza e la facilità di implementazione in mente. L'uso sshconsente di limitare l'utente all'esecuzione solo di comandi molto specifici. In questo caso, è possibile consentire all'utente backupsdi eseguire l'esecuzione rsynccon autorizzazioni di superutente.

Hai già eseguito lo scambio di chiavi e l'autenticazione è stata eseguita correttamente. Nel authorized_keysfile sull'host remoto da cui si esegue il backup della /homedirectory, è possibile aggiungere una command=direttiva alla chiave utilizzata dall'utente backups. Questa direttiva consentirà di eseguire quel comando solo quando quella chiave viene utilizzata per l'autenticazione. Quindi il primo campo della chiave sarebbe simile a questo:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Puoi andare ancora oltre e aggiungere più opzioni alla chiave, ad esempio from=myhost,no-pty,no-X11-forwarding.

Ciò dovrebbe garantire una sicurezza decente e non richiedere la modifica delle autorizzazioni del file system sottostante. Probabilmente dovrai giocare con il comando che inserisci nel authorized_keysfile finché non funziona come previsto; potrebbe volerci un po 'per avvolgere il cervello. Il comando specificato in authorized_keyssostituirà sostanzialmente le rsyncopzioni che passerai dall'host che si connette.

Molte buone informazioni in man sshd. Vuoi leggere in modo specifico la sezione FORMATO AUTHORIZED_KEYS.


Ok, sto seguendo penso. L'aggiunta di tale direttiva al file authorized_keys ti consentirà di eseguire un comando remoto con autorizzazioni di superutente giusto? Come potrei modificare il comando rsync -e ssh -az backups@domain.com:/home /location/of/local/folderper istruirlo in modo che venga eseguito come superutente sul computer remoto? O lo farà automaticamente? Grazie per il tuo tempo e aiuto. :)
Thomas Clayson,

1
La direttiva non consente automaticamente di eseguire il comando come superutente. Quando tale chiave specifica viene utilizzata per l'autenticazione, limita l'utente SOLO al comando specificato. Le autorizzazioni del superutente provengono da "sudo". Tecnicamente, potresti inserire l'intero comando "rsync" nel file authorized_keys e avviare la connessione ssh dall'host di backup. L'intero processo verrebbe quindi avviato automaticamente al termine dell'autenticazione. Vorrei iniziare la connessione con qualcosa del tipo "backup ssh @ remotehost sudo rsync"
George M

Ci vuole un po 'per avvolgere il cervello, ma è piuttosto bello quando finalmente scatta e ti rendi conto di cosa puoi fare.
George M

2

Un'opzione è eseguire un server rsync sul sistema remoto.

Fondamentalmente, crea un rsync.confcon uid=rootquindi usa rsync -az rsync://domain.com.

Vedi http://pastebin.com/5hQx1mRV per un esempio che qualcun altro ha scritto e Configurazione del demone rsync per alcune nozioni di base sull'abilitazione di un server in Ubuntu.

Nota che devi considerare la sicurezza di questo. Un approccio migliore è probabilmente quello di spingere il sistema remoto al tuo sistema locale.


Sembra abbastanza buono grazie. Quindi sincronizzerà tutto dalla /backup/lccartella sul server remoto? Devo cambiare il pathbit /homeper farlo funzionare?
Thomas Clayson,

Grazie per la modifica amico. L'unico problema è che non possiamo garantire un indirizzo IP statico dove siamo, e vogliamo farlo tramite cron in modo che accada sempre. Se "spingiamo" potrebbe smettere di funzionare se il nostro indirizzo IP cambia. : /
Thomas Clayson

@ThomasClayson: ecco a cosa serve il DNS dinamico. :)
Warren Young

1

Potresti forse usare ACL se il filesystem sottostante lo supporta.

È necessario aggiungere il backup del gruppo nella LCA di ciascun file e directory. Ma per essere aggiunto automaticamente per i file e le directory appena creati, è necessario prima impostare l'ACL predefinito su tutte le directory esistenti. Quindi sul server remoto:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Quindi dovresti avere l'autorizzazione rx per tutte le directory esistenti e leggere per i file. Puoi farlo con 2 comandi (senza il -d questa volta)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

Ciò ti darà un'autorizzazione extra per leggere i file nel backup di gruppo senza modificare l'utente e il gruppo esistenti che possiedono ciascun file.

Nota: per accelerare la ricerca | comando xargs è possibile aggiungere la seguente opzione al comando xargs: -P ncon n il numero di processi paralleli. Puoi impostarlo sul numero di CPU che hai sulla tua macchina + 1.


Gli xarg paralleli non accelereranno le cose in questo caso, perché il collo di bottiglia è I / O, non CPU.
Mikel

Linux utilizza le cache in memoria prima di eseguire il commit delle modifiche su disco, quindi risulta più veloce dal punto di vista dell'utente. E anche un piccolo notebook hdd potrebbe gestire il carico di impostazione di più ACL in parallelo. Non è molto I / O. Provalo :)
Huygens

Ho appena letto qui superuser.com/a/422954/53206 che potresti semplicemente usare: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) molto più semplice!
Huygens,
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.