rsync Odmowa wykonania kopii zapasowej zdalnego katalogu na moim komputerze lokalnym

11

Otrzymuję błąd wymieniony w tytule.

Znalazłem podobne pytanie: Uruchom rsync z uprawnieniami administratora na zdalnym komputerze . To nie odpowiada na moje pytanie.

Jestem administratorem na zdalnym serwerze i chcę używać rsyncdo tworzenia kopii zapasowych plików w lokalnym urządzeniu. Oto moje polecenie rsync:

$ rsync -avz [email protected]:/var/www/ /backups/Sites/MySite/

To głównie działa. Logowanie odbywa się za pomocą pary kluczy. Nie używam i nie mogę używać hasła (EDYCJA: aby zalogować się przez SSH). Kilka plików nie zostanie przeniesionych z powodu uprawnień. Nie chcę zmieniać tych uprawnień.

Oto błąd:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Ja nie chce zmienić uprawnienia na tym pliku. To (i inne podobne) nie powinno być czytelne (z wyjątkiem roota).

Musi to działać w zadaniu cron i wolę proste rozwiązanie jednowierszowe, używając tylko komendy rsync. Następnym wyborem byłby skrypt powłoki, który mogę wywołać z zadania crona. W żadnym wypadku nie mogę ręcznie zalogować się na zdalnej maszynie i zostać rootem (ponieważ będę spał, gdy to uruchomi się).

Jak mogę użyć rsync, aby utworzyć kopię zapasową w moim lokalnym polu?

MountainX
źródło
czy możesz nam pokazać coś takiego jak ssh [email protected] "cat /var/www/webapp/securestuff/install.php"> plik lokalny?
Florenz Kley,
@Florenz Kley: Nie rozumiem twojego komentarza
MountainX
pokaż mi, że możesz odczytać plik, a pokażę ci polecenie rsync, które działa :-). Opcja nr 2 z grawitacji jest prawdopodobnie najlepszym wyborem.
Florenz Kley,
@Florenz Kley: ssh [email protected] "echo moje_hasło | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX
Mam rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Więc moim komputerem źródłowym był Windows Cygwin. Nieco inna sytuacja, ale dla potomności moim rozwiązaniem było kliknięcie prawym przyciskiem myszy cmd.exe i uruchomienie jako administrator .
Bob Stein

Odpowiedzi:

8

Nie można wykonać kopii zapasowej pliku, którego inaczej nie można odczytać, więc uprawnienia będą musiały zostać zmienione lub zastąpione przez root .

Twoje opcje bardziej szczegółowo:

  • Zastąp uprawnienia, rsync'ing jak [email protected]bezpośrednio. (

  • ... lub konfigurując sudo na serwerze, aby umożliwić rsyncdziałanie komponentu po stronie serwera bez hasła .

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    i

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • Utwórz dedykowane konto „kopii zapasowej strony internetowej” na serwerze. Zmień uprawnienia do plików, aby były czytelne dla konta „tworzenie kopii zapasowych stron internetowych”; możesz używać list ACL i setfacldo tego. Nie używaj tego konta do niczego innego.

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • Napisz skrypt na serwerze, który zrzuci / var / www / do zaszyfrowanego archiwum. Ponownie można to zrobić jako root (przez crontab) lub poprzez skonfigurowanie sudo tak, aby nie wymagało hasła dla tego skryptu. Na przykład:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    Kopia zapasowa byłaby wykonywana przez ciągnięcie całego pliku archiwum za każdym razem, co może być nieefektywne w przypadku dużych witryn:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    Wymaganie dotyczące hasła zostanie usunięte poprzez edycję sudoers :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
użytkownik1686
źródło
Dzięki. Dobre sugestie. Każdy z nich prawdopodobnie będzie dla mnie działał. Zastanawiam się również nad rozwiązaniem pod adresem superuser.com/questions/270911/..., jeśli uda mi się ustalić potencjalne skutki uboczne.
MountainX,
BTW, miałem na myśli jedną z dwóch ostatnich opcji. Logowanie się jako root przez SSH nie jest dozwolone na serwerze.
MountainX
@MountainX: Oddzieliłem „rsync przez sudo” jako osobny wybór. To może również działać.
user1686,
Dzięki! „rsync przez sudo” byłby moim preferowanym wyborem. Spróbuję twojej sugestii. Wygląda na to, że muszę to zaimplementować za pomocą visudo w Ubuntu na serwerze. Niewiele pomieszałem z visudo, ale dałeś mi wystarczająco dużo, aby zacząć. Dzięki jeszcze raz.
MountainX,
5

Na zdalnym hoście możesz uruchomić demona rsync

root uid

w /etc/rsyncd.confpliku.

Umożliwi to demonowi korzystanie z CAP_DAC_OVERRIDEmożliwości i odczytywanie lokalnego systemu plików bez zmiany uprawnień / własności.

Jeśli potrzebujesz tylko wykonać kopię zapasową, dobrą praktyką jest ustawienie rsync na tryb tylko do odczytu:

tylko do odczytu = prawda

altmas5
źródło
0

Jeśli pliki są tylko do odczytu root, musisz mieć rootdostęp do kopii zapasowej pliku, czytając go z systemu plików. rsyncczyta pliki z systemu plików, a nie z surowego urządzenia.

Z wyjątkiem dump, ddi podobnych kopii zapasowych, które kopiują partycję raczej, że programy, kopie zapasowe plików odczyt plików z systemu plików. Narzędzia do tworzenia kopii zapasowych nie będą mogły odczytać i wykonać kopii zapasowych plików, do których uprawnienia identyfikatora użytkownika użyte do ich uruchomienia uniemożliwiają dostęp. Tak się dzieje.

W większości przypadków należy zaufać oprogramowaniu do tworzenia kopii zapasowych na tyle, aby umożliwić odczyt wszystkich danych. Oznacza to również, że musisz zaufać swojemu nośnikowi kopii zapasowych wszystkimi danymi. W niektórych przypadkach możesz wykluczyć niektóre pliki z kopii zapasowej i użyć alternatywnej metody do wykonania kopii zapasowej ich zawartości.

EDYCJA: Podczas archiwizacji danych (kopiowanie wszystkich uprawnień) będziesz potrzebować dostępu do konta root na obu serwerach. Jeśli robisz to jako kopię zapasową, możesz spojrzeć na rozwiązanie takie jak BackupPC, które używa rsync do odczytu plików, ale przechowuje pliki we własnym drzewie katalogów.

BillThor
źródło
Istnieją sposoby na zapewnienie dostępu do katalogu głównego rsync. Po prostu ich nie znam. Pytam o to, jak dać rsync rootowi dostęp do tworzenia kopii zapasowych tych plików. Może muszę ponownie przeczytać odpowiedź na „Uruchom rsync z uprawnieniami roota na zdalnej maszynie” i sprawdzić, czy mogę to rozgryźć…
MountainX