Czy powinienem włączyć konto root dla rsync?

10

Jak mogę włączyć konto roota? Wiem, że zwykle nie jest to zalecane, ale chciałbym skonfigurować nieinteraktywny skrypt do tworzenia kopii zapasowych mojego serwera za pomocą rsync. Mógłbym użyć, --rsync-path="sudo rsync"ale wtedy musiałbym przechowywać moje hasło sudo w sposób wyraźny, co wydaje się znacznie gorsze niż włączenie konta root.

Olivier Lalonde
źródło

Odpowiedzi:

10
  1. Utwórz nowe, oddzielne mybackupkonta użytkowników na kliencie i serwerze
  2. Zablokuj hasła sudo passwd -l mybackupdla tych kont, aby uniemożliwić bezpośrednie logowanie
  3. Pozwalasz, poprzez sudote nowe konta do uruchomienia bardzo konkretne /usr/bin/rsync/ --some-long-command /from/here /to/therepolecenie jako root ze NOPASSWD:w /etc/sudoersużyciusudo visudo
  4. Utwórz nowe klucze SSH bez hasła dla lokalnego do zdalnego hosta za pomocą sudo -u mybackup ssh-keygen
  5. Dodaj sudo -u crontab -ena jednym lub drugim końcu, aby uruchomić zdalne rsyncza pomocą sshi klucze jako transportu

W ten sposób jedynym poleceniem, które można uruchomić jako root, jest polecenie, na które wyraźnie zezwolono, a jedynym zdalnym użytkownikiem, który może je aktywować, jest posiadacz drugiej połowy zainstalowanej pary kluczy ssh, która ponieważ ma również zablokowane hasło może być tylko ktoś z dostępem do sudo lub konfiguracja crontab.

sladen
źródło
Właśnie tego nie myślałem o zezwoleniu na bardzo specyficzne polecenie w sudoers (zezwoliłem na „rsync”). Świetna sugestia!
Olivier Lalonde
2
+1 za zanotowanie „bardzo konkretnego ... polecenia”. W przeciwnym razie przyznanie użytkownikowi prawa do uruchomienia sudo rsynci umożliwienie mu wyboru opcji przekazanych do rsync oznacza, że ​​użytkownik może na przykład użyć rsync do odczytu / zapisu /etc/sudoerspliku i udzielić sobie pełnego dostępu do sudo.
Suzanne Dupéron
7
  1. Możesz edytować, /etc/sudoersaby zezwolić każdemu użytkownikowi, który uruchamia polecenie (lub wszystkim użytkownikom), aby uruchomił je rootbez hasła (być może trochę niebezpieczne z rsync).

  2. Nie możesz po prostu uruchomić całego polecenia / skryptu / cokolwiek innego root? Zakładam, że będzie to działało przez crona, więc po prostu dodaj rootzadanie przez:

    sudo crontab -e
    

    Uwaga: możesz robić dość złożone rzeczy, zawijając komendę cron w bash -e "..."nawias klamrowy lub po prostu zrób to w osobnym skrypcie. Zakładając, że nie jest skonfigurowany, jeśli zostanie rooturuchomiony (przez cron), będzie działał roottak, aby rozwiązać problem z uprawnieniami.

Oli
źródło
Problem polega na tym, że jeśli skonfiguruję skrypt na moim komputerze lokalnym i uruchomię go jako root, wystąpią problemy z uprawnieniami na serwerze. Jeśli skonfiguruję skrypt na moim serwerze i uruchomię go jako root, to lokalna maszyna będzie miała problemy z uprawnieniami. Innymi słowy, muszę mieć uprawnienia roota zarówno na komputerze lokalnym, jak i na serwerze.
Olivier Lalonde
Możesz napisać skrypt na każdym końcu i pozwolić, aby był uruchamiany sudoprzez zwykłych użytkowników. Byłoby to bezpieczniejsze niż tylko na to pozwalanie rsync.
Oli
Sudo to świetny pomysł. Możesz dokładnie określić, który użytkownik może uruchomić które polecenie. Zrób to.
Frank
6

Możesz (ale nie powinieneś) podać użytkownikowi root hasło

sudo passwd root

Edycja: Bit Setuid nie działa dla skryptów. W przeciwnym razie możesz użyć bitu setuid w programie do tworzenia kopii zapasowych.

sudo chown root backup
sudo chmod u+s backup

Być może chcesz uruchomić kopię zapasową jako zadanie CRON?

Szczery
źródło
1
Nie musisz określać „root”, ponieważ sudo działa jako env użytkownika root, którym jest root. ( sudo whoamizwraca, root), więc sudo passwdjest po prostu potrzebny.
Marco Ceppi
setuid nie działa dla skryptów
enzotib
Tak, skrypty są wykonywane przez powłokę nazwaną w linii she-bang. Przepraszamy za wprowadzanie w błąd.
Frank