Sollte ich das Root-Konto für rsync aktivieren?

10

Wie kann ich das Root-Konto aktivieren? Ich weiß, dass dies normalerweise nicht empfohlen wird, möchte jedoch ein nicht interaktives Skript einrichten, um meinen Server mit rsync zu sichern. Ich könnte verwenden, --rsync-path="sudo rsync"aber dann müsste ich mein sudo-Passwort klar speichern, was viel schlimmer erscheint als das Aktivieren des Root-Kontos.

Olivier Lalonde
quelle

Antworten:

10
  1. Erstellen Sie neue, separate mybackupBenutzerkonten auf dem Client und dem Server
  2. Sperren Sie die Kennwörter sudo passwd -l mybackupfür diese Konten, um eine direkte Anmeldung zu verhindern
  3. Allow, über sudodiese neuen Konten, einen ganz bestimmten ausführen /usr/bin/rsync/ --some-long-command /from/here /to/thereBefehl als root mit NOPASSWD:in /etc/sudoersVerwendungsudo visudo
  4. Erstellen Sie neue kennwortlose SSH-Schlüssel für den lokalen Host des Remote-Hosts mit sudo -u mybackup ssh-keygen
  5. Fügen Sie sudo -u crontab -ean dem einen oder anderen Ende hinzu, um die Fernbedienung rsyncmit sshund den Schlüsseln als Transport auszuführen

Auf diese Weise der einzige Befehl, kann als root ausgeführt werden , ist der, dass Sie explizit erlaubt haben, und die einzige Remote - Benutzer, aktivieren kann der Inhaber der anderen Hälfte der installierten ssh Schlüsselpaar ist, das , weil es auch das Passwort gesperrt hat kann nur jemand mit sudo-Zugriff selbst oder der von Ihnen eingerichteten Crontab sein.

sladen
quelle
Genau das habe ich nicht daran gedacht, einen ganz bestimmten Befehl in Sudoern zuzulassen (ich habe 'rsync' zugelassen). Toller Vorschlag!
Olivier Lalonde
2
+1 für die Angabe "eines sehr spezifischen ... Befehls". Wenn Sie einem Benutzer das Recht zum Ausführen geben sudo rsyncund dem Benutzer erlauben, die an rsync übergebenen Optionen auszuwählen, kann der Benutzer beispielsweise rsync zum Lesen / Schreiben der /etc/sudoersDatei verwenden und sich den vollen Sudo-Zugriff gewähren.
Suzanne Dupéron
7
  1. Sie können bearbeiten /etc/sudoers, damit jeder Benutzer, der den Befehl ausführt (oder alle Benutzer), ihn rootohne Kennwort ausführen kann (möglicherweise etwas gefährlich bei rsync).

  2. Können Sie nicht einfach den gesamten Befehl / das Skript / was auch immer ausführen root? Ich gehe davon aus, dass dies über cron ausgeführt wird. Fügen Sie also einfach einen rootJob hinzu über:

    sudo crontab -e
    

    Hinweis: Sie können ziemlich komplexe Dinge tun, indem Sie Ihren cron-Befehl in eine bash -e "..."Klammer setzen oder ihn einfach in einem separaten Skript ausführen. Angenommen, es ist nicht festgelegt, wenn rootes (durch cron) ausgeführt wird, wird es rootso ausgeführt, dass Ihr Berechtigungsproblem gelöst werden sollte.

Oli
quelle
Das Problem ist, dass wenn ich das Skript auf meinem lokalen Computer einrichte und es als root ausführe, Berechtigungsprobleme auf dem Server auftreten. Wenn ich das Skript auf meinem Server einrichte und es als root ausführe, ist der lokale Computer derjenige mit Berechtigungsproblemen. Mit anderen Worten, ich muss über Root-Rechte sowohl auf dem lokalen als auch auf dem Server verfügen.
Olivier Lalonde
Sie können an jedem Ende ein Skript schreiben und zulassen, dass es sudovon normalen Benutzern ausgeführt wird. Das wäre sicherer als nur zuzulassen rsync.
Oli
Sudo ist eine großartige Idee. Sie können genau angeben, welcher Benutzer welchen Befehl ausführen darf. Tu es.
Frank
6

Sie können (sollten aber nicht) dem Root-Benutzer ein Passwort geben

sudo passwd root

Bearbeiten: Das Setuid-Bit funktioniert nicht für Skripte. Andernfalls können Sie das setuid-Bit im Sicherungsprogramm verwenden.

sudo chown root backup
sudo chmod u+s backup

Vielleicht möchten Sie das Backup sogar als Cron-Job ausführen?

Frank
quelle
1
Sie müssen nicht , da sudo läuft angeben „root“ müssen als die Wurzel des env seine Benutzer ist root. ( sudo whoamikehrt zurück, root) wird also nur sudo passwdbenötigt.
Marco Ceppi
Setuid funktioniert nicht für Skripte
Enzotib
Richtig, Skripte werden von der in der She-Bang-Zeile genannten Shell ausgeführt. Entschuldigung für die Fehlinformationen.
Frank