Nadaj użytkownikom uprawnienia do wszystkich plików i folderów

9

Chcę mieć użytkownika, który ma dostęp do wszystkich plików i folderów w systemie. Ma to na celu użycie RSYNC na komputerze lokalnym do wykonania kopii zapasowej komputera zdalnego.

W tej chwili korzystamy z tego użytkownika backupsi chociaż dodaliśmy tego użytkownika do grup, sudoa adminrsync nadal zwraca komunikaty takie jak:

rsync: opendir "/ location / to / folder" nie powiodło się: Odmowa uprawnień (13)

rsync: send_files nie można otworzyć „/ location / to / file”: Odmowa uprawnień (13)

Każdy pomysł, w jaki sposób dajemy użytkownikowi backupsdostęp do wszystkiego (bez dodawania użytkownika do wszystkich grup w dowolnym momencie - zdalny serwer, który próbujemy wykonać kopię zapasową, jest dedykowanym serwerem hostingowym, na którym każde konto ma własnego użytkownika w systemie).

Dziękuję za wszelką pomoc.

Thomas Clayson
źródło
1
Czy możesz podać przykłady ścieżek? Jeśli jest /proc, /devitp. , Należy spodziewać się błędów.
Phil
dodać użytkownika backupsdo sudoi adminnic nie zmieni.
favadi
@Phil Próbuję wykonać kopię zapasową całego katalogu / home. Awarie plików / katalogów to takie, /home/a/c/account/users/mail:usernamektóre mają uprawnienia takie jak drwx------i są własnością mail:4096. Zakładam, że ponieważ użytkownik backupsjest w grupie sudolub adminnie ma dostępu, ponieważ nie ma uprawnień dostępu do grup? Nie wiem, ale to błąd w folderach / plikach tego typu.
Thomas Clayson
@favadi Już to zrobiłem ... wciąż nie działa.
Thomas Clayson
Musisz uruchomić rsyncpolecenie za pomocą sudo.
Phil

Odpowiedzi:

6

Samo dodanie użytkownika backupsdo grupy użytkowników sudonie zapewnia automatycznie dostępu konta do wszystkich plików w systemie. Daje to użytkownikowi uprawnienia do uruchomienia sudopolecenia.

Ponieważ używasz uwierzytelniania za pomocą klucza publicznego (prawdopodobnie bez hasła), podchodzę do tego z myślą o bezpieczeństwie i łatwości implementacji. Użycie sshpozwala ograniczyć użytkownikowi wykonywanie tylko bardzo specyficznych poleceń. W takim przypadku możesz zezwolić użytkownikowi backupsna wykonywanie rsyncz uprawnieniami administratora.

Dokonałeś już wymiany kluczy i weryfikacja uwierzytelnienia powiodła się. W authorized_keyspliku na zdalnym hoście, z którego tworzona jest kopia zapasowa /homekatalogu, możesz dodać command=dyrektywę do klucza używanego przez użytkownika backups. Ta dyrektywa zezwala na uruchamianie tej komendy tylko wtedy , gdy ten klucz jest używany do uwierzytelniania. Pierwsze pole klucza wyglądałoby podobnie do tego:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Możesz pójść jeszcze dalej i dodać więcej opcji do klawisza, takich jak from=myhost,no-pty,no-X11-forwarding.

Powinno to zapewnić przyzwoite bezpieczeństwo i nie wymagać modyfikacji podstawowych uprawnień systemu plików. Prawdopodobnie będziesz musiał grać poleceniem umieszczonym w authorized_keyspliku, dopóki nie zadziała zgodnie z oczekiwaniami; może zająć trochę czasu, aby otoczyć go mózgiem. Polecenie określone w parametrze authorized_keyszasadniczo zastąpi rsyncopcje przekazane z hosta łączącego.

Wiele dobrych informacji w man sshd. Chcesz dokładnie przeczytać sekcję FORMAT AUTORYZOWANYCH KLUCZY.

George M.
źródło
Ok, myślę, że śledzę. Dodanie tej dyrektywy do pliku autoryzowanych_kluczy pozwoli ci na uruchomienie komendy zdalnej z uprawnieniami administratora, prawda? Jak mam zmienić polecenie rsync -e ssh -az [email protected]:/home /location/of/local/folder, aby poinstruować go, aby działał jako administrator na komputerze zdalnym? A może zrobi to automatycznie? Dziękuję za poświęcony czas i pomoc. :)
Thomas Clayson
1
Dyrektywa nie pozwala automatycznie na uruchomienie komendy jako superużytkownik. Gdy ten konkretny klucz jest używany do uwierzytelniania, użytkownik ogranicza się TYLKO do podanego polecenia. Uprawnienia administratora pochodzą z „sudo”. Technicznie rzecz biorąc, możesz umieścić całą komendę „rsync” w pliku autoryzowanych_kluczy i po prostu zainicjować połączenie ssh z hosta kopii zapasowej. Cały proces rozpocznie się automatycznie po zakończeniu uwierzytelnienia. Chciałbym rozpocząć połączenie od czegoś takiego jak „ssh backups @ remotehost sudo rsync”
George M
To zajmuje trochę czasu, aby otoczyć mózg, ale jest całkiem fajne, kiedy w końcu kliknie i zdasz sobie sprawę, co możesz zrobić.
George M,
2

Jedną z opcji jest uruchomienie serwera rsync w systemie zdalnym.

Zasadniczo utwórz rsync.confz uid=rootużyciem następnie rsync -az rsync://domain.com.

Zobacz http://pastebin.com/5hQx1mRV, aby zobaczyć przykład, który napisał ktoś inny i Konfigurowanie demona rsync w celu zapoznania się z podstawami włączania serwera w Ubuntu.

Pamiętaj, że musisz wziąć pod uwagę bezpieczeństwo tego. Lepszym rozwiązaniem jest prawdopodobnie zdalne przejście systemu na system lokalny.

Mikel
źródło
Dzięki, wygląda to całkiem nieźle. Czy to zsynchronizuje wszystko z /backup/lcfolderu na zdalnym serwerze? Czy mogę zmienić pathtrochę się /homedostać to do pracy?
Thomas Clayson
Dzięki za edycję, koleś. Jedynym problemem jest to, że nie możemy zagwarantować statycznego adresu IP w miejscu, w którym się znajdujemy, i chcemy to zrobić za pośrednictwem crona, aby tak się działo przez cały czas. Jeśli „wypchniemy”, może przestać działać, jeśli zmieni się nasz adres IP. : /
Thomas Clayson
@ThomasClayson: Po to jest dynamiczny DNS. :)
Warren Young,
1

Być może możesz użyć listy ACL, jeśli bazowy system plików ją obsługuje.

Należy dodać kopię zapasową grupy do listy ACL każdego pliku i katalogu. Aby jednak zostać automatycznie dodany do nowo utworzonego pliku i katalogu, należy najpierw ustawić domyślną listę ACL dla wszystkich istniejących katalogów. Na zdalnym serwerze:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Następnie powinieneś mieć uprawnienia rx do wszystkich istniejących katalogów i czytać pliki. Możesz to zrobić za pomocą 2 poleceń (tym razem bez opcji -d)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

To da ci dodatkowe uprawnienia do odczytu plików do kopii zapasowej grupy bez zmiany istniejącego użytkownika i grupy, która jest właścicielem każdego pliku.

Uwaga: aby przyspieszyć wyszukiwanie | komenda xargs możesz dodać następującą opcję do komendy xargs: -P nn oznacza liczbę równoległych procesów. Możesz ustawić liczbę procesorów na swoim komputerze + 1.

Huygens
źródło
Równoległe xargs nie przyspieszą w tym przypadku, ponieważ wąskim gardłem są wejścia / wyjścia, a nie procesor.
Mikel
Linux używa pamięci podręcznej w pamięci przed zatwierdzeniem zmian na dysku, dzięki czemu jest szybszy z punktu widzenia użytkownika. I nawet mały dysk twardy notebooka może poradzić sobie z obciążeniem ustawiania wielu list ACL w równoległych ustawieniach. To nie jest tak dużo I / O. Spróbuj :)
Huygens,
Właśnie przeczytałem tutaj superuser.com/a/422954/53206, że możesz po prostu użyć: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) o wiele prostsze!
Huygens