Devo abilitare l'account root per rsync?


10

Come posso abilitare l'account root? So che di solito non è raccomandato, ma mi piacerebbe impostare uno script non interattivo per il backup del mio server utilizzando rsync. Potrei usare --rsync-path="sudo rsync"ma poi avrei bisogno di archiviare la mia password sudo in modo chiaro che sembra molto peggio che abilitare l'account di root.

Risposte:


10
  1. Crea nuovi mybackupaccount utente separati sul client e sul server
  2. Blocca le password con sudo passwd -l mybackupper questi account per impedire l'accesso diretto
  3. Consentire, tramite sudo, a quei nuovi account di eseguire un /usr/bin/rsync/ --some-long-command /from/here /to/therecomando molto specifico come root con NOPASSWD:in /etc/sudoersusesudo visudo
  4. Creare nuove chiavi SSH senza password per l'host locale tramite l'host remoto sudo -u mybackup ssh-keygen
  5. Aggiungi a sudo -u crontab -euna o l'altra estremità per eseguire il telecomando rsyncusando sshe le chiavi come trasporto

In questo modo l'unico comando che può essere eseguito come root è quello che hai esplicitamente permesso, e l'unico utente remoto che può attivarlo è il proprietario dell'altra metà della coppia di chiavi ssh installata, che perché ha anche la password bloccata può essere solo qualcuno con accesso sudo stesso o il crontab che hai impostato.


Questo è esattamente ciò che non pensavo di consentire un comando molto specifico in sudoers (ho permesso 'rsync'). Ottimo consiglio!
Olivier Lalonde,

2
+1 per notare "un comando ... molto specifico". Altrimenti, dare a un utente il diritto di eseguire sudo rsynce consentire all'utente di scegliere le opzioni passate a rsync significa che l'utente può usare rsync per leggere / scrivere il /etc/sudoersfile, ad esempio, e concedersi l'accesso completo sudo.
Suzanne Dupéron,

7
  1. Puoi modificare /etc/sudoersper consentire a qualunque utente stia eseguendo il comando (o a tutti gli utenti) di eseguirlo come rootsenza password (forse un po 'pericoloso con rsync).

  2. Non puoi semplicemente eseguire l'intero comando / script / come root? Presumo che questo verrà eseguito tramite cron, quindi basta aggiungere un rootlavoro tramite:

    sudo crontab -e
    

    Nota: puoi fare cose abbastanza complesse avvolgendo il tuo comando cron in bash -e "..."parentesi graffe o semplicemente eseguendolo in uno script separato. Supponendo che non sia impostato, se lo rootesegue (attraverso cron), verrà eseguito in rootmodo tale da risolvere il problema di autorizzazione.


Il problema è che se installo lo script sul mio computer locale e lo eseguo come root, avrà problemi di autorizzazione sul server. Se installo lo script sul mio server e lo eseguo come root, il computer locale sarà quello con problemi di autorizzazione. In altre parole, ho bisogno di avere i privilegi di root su entrambe le macchine locale e server.
Olivier Lalonde il

È possibile scrivere uno script a ciascuna estremità e consentire l'esecuzione sudoda parte di utenti normali. Sarebbe più sicuro del semplice permesso rsync.
Oli

Il Sudo è un'ottima idea. È possibile specificare con precisione quale utente può eseguire quale comando. Fallo.
Frank

6

Potresti (ma non dovresti) fornire all'utente root una password

sudo passwd root

Modifica: il bit Setuid non funziona per gli script. Altrimenti, è possibile utilizzare il bit setuid sul programma di backup.

sudo chown root backup
sudo chmod u+s backup

Forse, vuoi anche eseguire il backup come cron job?


1
Non è necessario specificare "root" poiché sudo viene eseguito come env del root il suo utente è root. ( sudo whoamirestituisce, root) quindi sudo passwdè necessario.
Marco Ceppi

setuid non funziona per gli script
enzotib

A destra, gli script sono eseguiti dalla shell nominata nella linea she-bang. Ci scusiamo per la disinformazione.
Frank
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.