Dois-je activer le compte root pour rsync?

10

Comment puis-je activer le compte root? Je sais que ce n'est généralement pas recommandé, mais j'aimerais configurer un script non interactif pour sauvegarder mon serveur à l'aide de rsync. Je pourrais utiliser --rsync-path="sudo rsync"mais alors je devrais stocker mon mot de passe sudo en clair, ce qui semble bien pire que d'activer le compte root.

Olivier Lalonde
la source

Réponses:

10
  1. Créer de nouveaux mybackupcomptes d'utilisateurs distincts sur le client et le serveur
  2. Verrouillez les mots de passe avec sudo passwd -l mybackuppour ces comptes pour empêcher la connexion directe
  3. Autoriser, via sudo, ces nouveaux comptes à exécuter une /usr/bin/rsync/ --some-long-command /from/here /to/therecommande très spécifique en tant que root avec NOPASSWD:en /etc/sudoersutilisantsudo visudo
  4. Créez de nouvelles clés SSH sans mot de passe pour le local vers l'hôte distant à l'aide de sudo -u mybackup ssh-keygen
  5. Ajoutez à l' sudo -u crontab -eune ou l'autre extrémité pour exécuter la télécommande en rsyncutilisant sshet les clés comme moyen de transport

De cette façon, la seule commande qui peut être exécutée en tant que root est celle que vous avez explicitement autorisée, et le seul utilisateur distant qui peut l'activer est le titulaire de l'autre moitié de la paire de clés ssh installée, qui parce que le mot de passe est également verrouillé ne peut être qu'une personne disposant de l'accès sudo, ou de la crontab que vous avez configurée.

sladen
la source
C'est exactement ce que je ne pensais pas autoriser une commande très spécifique dans sudoers (j'ai autorisé 'rsync'). Grande suggestion!
Olivier Lalonde
2
+1 pour avoir noté "une commande ... très spécifique". Sinon, donner à un utilisateur le droit de s'exécuter sudo rsyncet lui permettre de choisir les options passées à rsync signifie que l'utilisateur peut utiliser rsync pour lire / écrire le /etc/sudoersfichier par exemple, et s'accorder un accès sudo complet.
Suzanne Dupéron
7
  1. Vous pouvez modifier /etc/sudoerspour permettre à tout utilisateur exécutant la commande (ou à tous les utilisateurs) de l'exécuter rootsans mot de passe (peut-être un peu dangereux avec rsync).

  2. Ne pouvez-vous pas simplement exécuter la commande / script / tout comme root? Je suppose que cela va s'exécuter via cron, alors ajoutez simplement un roottravail via:

    sudo crontab -e
    

    Remarque: vous pouvez faire des choses assez complexes en enveloppant votre commande cron dans une bash -e "..."accolade ou simplement en le faisant dans un script séparé. En supposant qu'il ne soit pas configuré, s'il est rootexécuté (à travers cron), il s'exécutera de rootmanière à résoudre votre problème d'autorisation.

Oli
la source
Le problème est que si je configure le script sur ma machine locale et l'exécute en tant que root, il y aura des problèmes d'autorisation sur le serveur. Si je configure le script sur mon serveur et l'exécute en tant que root, la machine locale sera celle avec des problèmes d'autorisation. En d'autres termes, je dois avoir des privilèges root sur les machines locales et serveur.
Olivier Lalonde
Vous pouvez écrire un script à chaque extrémité et lui permettre d'être exécuté sudopar des utilisateurs normaux. Ce serait plus sûr que de simplement le permettre rsync.
Oli
Sudo est une excellente idée. Vous pouvez spécifier précisément quel utilisateur peut exécuter quelle commande. Fais le.
Frank
6

Vous pouvez (mais ne devez pas) donner à l'utilisateur root un mot de passe avec

sudo passwd root

Edit: le bit Setuid ne fonctionne pas pour les scripts. Sinon, vous pourriez utiliser le bit setuid sur le programme de sauvegarde.

sudo chown root backup
sudo chmod u+s backup

Peut-être, vous voulez même exécuter la sauvegarde en tant que tâche cron?

Franc
la source
1
Vous n'avez pas besoin de spécifier "root" car sudo s'exécute en tant qu'env de la racine, son utilisateur est root. ( sudo whoamiretourne, root) si juste sudo passwdest nécessaire.
Marco Ceppi
setuid ne fonctionne pas pour les scripts
enzotib
A droite, les scripts sont exécutés par le shell nommé dans la ligne she-bang. Désolé pour la désinformation.
Frank