Mam to polecenie, aby wykonać kopię zapasową zdalnego komputera. Problem polega na tym, że potrzebuję praw root, aby czytać i kopiować wszystkie pliki. Nie mam włączonego użytkownika root ze względów bezpieczeństwa i używam sudo
Ubuntu. Czy potrzebuję fajnej instalacji rurowej lub czegoś takiego?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
root
konta.sudo
, szczególnie w połączeniu zNOPASSWD
zaleceniami zawartymi w komentarzach, tak naprawdę nie poprawia bezpieczeństwa komputera.Odpowiedzi:
Radzę, abyś po prostu używał konta root. Jeśli skonfigurujesz to w ten sposób:
sshd_config
komputer docelowy naPermitRootLogin without-password
.ssh-keygen
na komputerze, który pobiera kopię zapasową, aby utworzyć klucz prywatny SSH (tylko jeśli nie masz jeszcze klucza SSH). Nie ustawiaj hasła. Google samouczek, jeśli potrzebujesz szczegółowych informacji na ten temat, powinno być dużo./root/.ssh/id_rsa.pub
komputera kopii zapasowej do/root/.ssh/authorized_keys
komputera docelowego.wynikowa konfiguracja powinna być całkiem bezpieczna.
sudo
, szczególnie w połączeniu zNOPASSWD
zaleceniami zawartymi w komentarzach, nie ma żadnych korzyści w zakresie bezpieczeństwa, niż samo używanie konta root. Na przykład ta sugestia:zasadniczo i tak daje
rsyncuser
uprawnienia roota. Ty pytasz:Cóż, proste. Przy zalecanej konfiguracji
rsyncuser
może teraz działaćrsync
jako root, nawet bez pytania o hasło.rsync
jest bardzo potężnym narzędziem do manipulowania plikami, więc terazrsyncuser
ma bardzo potężne narzędzie do manipulowania plikami z uprawnieniami administratora. Znalezienie sposobu na wykorzystanie tego zajęło mi tylko kilka minut (przetestowane na Ubuntu 13.04, wymagadash
,bash
nie działa):Jak widać, stworzyłem sobie powłokę roota;
whoami
identyfikuje moje konto jako root, mogę tworzyć pliki/etc
i czytać/etc/shadow
. Moim wyczynem było ustawienie bitu setuid na plikudash
binarnym; powoduje, że Linux zawsze uruchamia ten plik binarny z uprawnieniami właściciela, w tym przypadku root.Nie, niezdarne obejście konta roota w sytuacjach, w których absolutnie właściwe jest jego używanie, nie ma dobrych powodów. Jest to kolejna forma programowania kultowego ładunku - tak naprawdę nie rozumiesz koncepcji sudo kontra root, po prostu ślepo stosujesz przekonanie, że „root jest zły, sudo jest dobry”, ponieważ gdzieś to przeczytałeś.
Z jednej strony zdarzają się sytuacje, w których
sudo
zdecydowanie jest odpowiednie narzędzie do pracy. Na przykład, gdy pracujesz interaktywnie na graficznym pulpicie Linuxa, powiedzmy Ubuntu, wtedy korzystanie z niegosudo
jest w porządku w tych rzadkich przypadkach, w których czasami potrzebujesz dostępu do roota. Ubuntu celowo ma wyłączone konto root i zmusza cię dosudo
domyślnego używania , aby uniemożliwić użytkownikom korzystanie z konta root tylko po to, aby się zalogować. Gdy użytkownik chce tylko użyć np. Przeglądarki internetowej, zalogowanie się jako root byłoby niebezpieczne. , a zatem brak domyślnego konta root uniemożliwia głupcom to zrobić.Z drugiej strony istnieją sytuacje takie jak Twoja, w których zautomatyzowany skrypt wymaga uprawnień roota do czegoś, na przykład do wykonania kopii zapasowej. Teraz korzystanie
sudo
z obejścia konta root jest nie tylko bezcelowe, ale także niebezpieczne: na pierwszy rzut okarsyncuser
wygląda jak zwykłe konto nieuprzywilejowane. Ale jak już wyjaśniłem, atakującemu bardzo łatwo byłoby uzyskać pełny dostęp do konta root, gdyby już uzyskałrsyncuser
dostęp. Zasadniczo masz teraz dodatkowe konto root, które wcale nie wygląda jak konto root, co nie jest dobrą rzeczą.źródło
/root/.ssh/authorized_keys
, a nawet utworzyć wiele kont root z różnymi domami, aby każdy użytkownik mógł mieć swoją własną powłokę, dom i.ssh/authorized_keys
:)sshd
na ogół nie nie zalogować, które zezwoliło klucz był używany do łączenia się z kontem, więc jeśli połączyć jakbob
wtedysudo
, dostać lepszą ścieżkę audytu niż w przypadku łączenia się, byroot
bezpośrednio zbob
„s klucza.Skorzystaj z
--rsync-path
opcji, aby zdalnersync
polecenie działało zsudo
uprawnieniami. Twoje polecenie powinno wówczas brzmieć np .:Jeśli
sudo
pojawi się monit o podanie hasła, musisz tego uniknąć, używającNOPASSWD
przywileju na zdalnym koncie użytkownika (bezcelowe dla użytkownika root, może mieć sens w innych przypadkach użycia) lub jeśli nie chcesz tego robić:Upewnij się, że opcja
tty_tickets
jest wyłączona dla użytkownika, którego używasz, uruchamiając np.sudo visudo -f /etc/sudoers.d/local-rsync
I wprowadzając:Upewnij się, że opcja
requiretty
jest wyłączona dla użytkownika, którego używasz - może być domyślnie wyłączona. Metoda jest taka sama jak powyżej.Zaszczep
sudo
hasło na zdalnym komputerze, uruchamiając npssh -t [email protected] sudo
źródło
sudo
hasło, a niessh
hasłasudo /usr/bin/rsync
bez pytania o hasło; sprawdź,man sudoers
jak to zrobić; możesz w tym celu utworzyć dodatkowego użytkownika kopii zapasowej.sudo /usr/bin/rsync
na uruchomienie bez konieczności podawania jako hasła, dodaj do/etc/sudoers
pliku następujące informacje:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Pozwoli to użytkownikowi rsyncuser (jak wspomniano powyżej najlepiej byłoby utworzyć dedykowanego użytkownika kopii zapasowej) z żądaną nazwą użytkownika.rsync
zasadniczo zawsze ma uprawnienia roota; prawdopodobnie bardzo łatwo jest uzyskać pełną powłokę root na tym koncie. Myślę, że lepiej jest po prostu użyć prawdziwego konta root.echo "password" | something
że tak naprawdę nigdy tego nie użyłem i zgadzam się z problemami bezpieczeństwa związanymi z zezwalaniem na szybkie uruchamianie rsync (również tutaj nie sugerowane) jest złe. Cotty_tickets
właściwie nie mam pojęcia, wydaje się potrzebne i kwestia bezpieczeństwa. To działałoby bezpiecznie, nie zmieniając niczego, po prostu uruchamiając sodo na ssh, a następnie wykonując polecenie, prawda? Ale skoro zadałem to pytanie w celu skrypty, całkowicie zgadzam się, że ssh oparty na kluczach bez pw jest bezpieczny i słuszny. Zamiast tego zaakceptowałem odpowiedź Martinsa.Jednym prostym sposobem na to jest użycie
ssh-askpass
programu graficznego , dziękisudo
czemusudo
można obejść fakt, że nie jest on podłączony do terminala i pozwala bezpiecznie wprowadzić hasło:Oczywiście
ssh-askpass
program musi być zainstalowany w podanej lokalizacji i musisz uruchomić sesję X na komputerze, na którym pracujesz. Istnieje kilka wariantówssh-askpass
programu, które również powinny działać (wersje Gnome / KDE). Również graficznysudo
program zastępujący, taki jakgksu
lubkdesudo
powinien również działać.źródło
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
nie działarsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
. Och, Ubuntu dostarcza gnome-ssh-askpass, ale tak jest/usr/bin/ssh-askpass
zamiast/usr/lib/ssh/x11...
. Tak to działało :)ssh-askpass
. Musiałem po prostu sprawdzić znaczenie-chavzPe
, świetnie byłoby przeliterować je jako długie opcje.xeyes
używając SSH.Jeśli twój użytkownik ma już uprawnienia sudo, które są chronione hasłem, zachowałbym je w stanie, w jakim się znajdują, i dodałem tylko sekcję, aby używać rsync bez hasła:
źródło
Zetknąłem się dzisiaj z tym problemem i rozwiązałem go bez potrzeby modyfikowania plików konfiguracyjnych lub przyznawania uprawnień na poziomie root do kont użytkowników. Moja szczególna konfiguracja polegała na tym, że użytkownik
A
na komputerzefoo
musiał skopiować wszystkie katalogi użytkownikówfoo
na komputerbar
wbackup
katalogu, któryA
posiadał użytkownik . (UżytkownikA
ma uprawnienia sudofoo
.)Polecenie, którego użyłem, znajduje się poniżej. Został wywołany przez użytkownika
A
w/home
katalogu nafoo
.Spowoduje to uruchomienie rsync jako sudo, aby
foo
można było uzyskać dostęp do wszystkich katalogów użytkowników, ale mówi rsync, aby użył ssh, aby uzyskać dostęp do komputerabar
za pomocą użytkownikaA
poświadczeń użytkownika. Moje potrzeby były nieco inne niż powyższe pytanie, ale pozwoliło mi to szybko uzyskać kopię zapasową wszystkich katalogów użytkowników na konkretnej maszynie, którą zarządzam, bez konieczności marnowania konfiguracji systemu.źródło
-i
opcjissh
. Możesz użyć,--rsync-path="sudo /usr/bin/rsync"
jeśli masz sudo na komputerzebar
. To następnie czyta jakoroot@foo
i pisze jakoroot@bar
, ale przenosi przezA@foo
->B@bar
. Dzięki!Uruchomienie rsync jako demona na maszynie docelowej pozwala ci robić, co chcesz.
źródło
Moim rozwiązaniem jest użycie,
--rsync-path="sudo rsync"
ale wymaga podania hasła, obejście:źródło
$( cat my_password.txt )
która jest nieco lepsza, ale zwykle preferowane jest skonfigurowanie uprawnień po obu stronach i / lub użycie kluczy SSH, tak aby hasła nie były wymagane w interfejsie CLI