Używanie rsync z sudo na maszynie docelowej

39

Mając wątpliwości, że rsync nie ustawia UID i GID jak oczekiwano , moje przeczucie jest to, że rsyncpowinny być prowadzone jak rootna komputerze docelowym.

Nie mogę zalogować się rootprzez SSH, ponieważ jest to wyłączone ze względów bezpieczeństwa. Użytkownik na komputerze docelowym może korzystać sudo.

Czy można używać rsyncz sudo?

Thomas Weller
źródło

Odpowiedzi:

68

Na maszynie docelowej

  1. Znajdź ścieżkę do rsync:which rsync
  2. Edytuj /etc/sudoersplik: sudo visudo(patrz też: czy muszę używać visudo? )
  3. Dodaj wiersz <username> ALL=NOPASSWD:<path to rsync>, w którym nazwa użytkownika to nazwa użytkownika, którego rsync użyje do zalogowania. Ten użytkownik musi mieć możliwość korzystaniasudo

Następnie na maszynie źródłowej określ, która sudo rsyncma być używana:

rsync ... --rsync-path="sudo rsync" ...

Używanie go bez NOPASSWDurządzenia docelowego spowoduje wyświetlenie komunikatu

sudo: brak tty i nie określono programu askpass

Thomas Weller
źródło
Jaka jest modyfikacja tego, która pozwoliłaby na to każdemu użytkownikowi z określonej grupy? Czy zamiast <nazwa użytkownika> istnieje wersja <nazwa grupy>?
Brian
3
Dzięki, tylko używam pki, więc użyłem-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT
1
Oczywiście <nazwa użytkownika> może teraz odczytywać / zapisywać wszystko jako root przy użyciu rsync, lokalnie i zdalnie, więc część niemożności zalogowania się jako root z powodów bezpieczeństwa jest trochę dyskusyjna ... ponieważ zasadniczo robisz to teraz .
hmn
1
Nadal pojawia się błąd „nie jest obecny ...” po wykonaniu tych instrukcji? Byłam. Upewnienie się, że linia, do której dodałem, /etc/sudoersznajduje się na końcu pliku (lub po regułach grupowych, które mogą mieć wpływ na tego samego użytkownika) rozwiązało problem.
CPBL
1
Korzystam z tego rozwiązania, ale chciałbym poprawić bezpieczeństwo, ograniczając argumenty, które użytkownik może przekazać do rsync na serwerze docelowym. Zazwyczaj ograniczałbym argumenty, których można używać, <username> ALL=NOPASSWD:<path to rsync> <args>ale nie wiem, jakie byłyby argumenty, gdy byłyby wywoływane w ten sposób zdalnie. Jakieś pomysły?
Pete Cornell
3

Możesz poprosić zdalnego sudo o podanie hasła za pomocą X-Windows. Oto sposób, aby to zrobić:

  1. Upewnij się, że ssh-askpassjest zainstalowany na zdalnym hoście (i oczywiście używasz X-Windows)
  2. Upewnij się, że to jest w /etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. Dodaj te opcje do rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X przekaże informacje o X-Windowsie i port do sesji zdalnej
    • sudo -A sprawi, że sudo użyje ssh-askpass, aby poprosić cię o hasło
Bill Burdick
źródło
Działa na Ubuntu 18; utwórz /etc/sudo.conf (jeśli jeszcze nie istnieje) w miejscu docelowym m / c
Snidhi Sofpro
0

Moim rozwiązaniem jest użycie --rsync-path="sudo rsync", jeśli poprosisz o hasło, możesz użyć obejścia takiego:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  [email protected]:/ .

Ale umieszczenie hasła w wierszu polecenia nie jest bezpieczne.

Bulat
źródło