Jak cofnąć polecenie chown?

17

Jeśli uruchomię:

sudo chown -R user:user /

Czy mogę przywrócić to, co było przed uruchomieniem?

fronthem
źródło
1
Podobnie jak ostrzeżenie dla innych: Poniższe polecenie sudo chown -R user:user ..może mieć taki sam efekt, jak wspomniany tutaj, jeśli jesteś jeden poziom poniżej katalogu głównego systemu plików. Nie próbuj czegoś takiego.
passerby51,

Odpowiedzi:

22

W skrócie: nie.

Musisz przywrócić z kopii zapasowej. (Niektóre narzędzia do tworzenia kopii zapasowych mogą mieć opcje przywracania tylko uprawnień, inne mogą wyświetlać pliki z kopiami zapasowymi wraz z uprawnieniami i można ich użyć do naprawy systemu).

Jeśli nie masz kopii zapasowej, musisz to wszystko naprawić ręcznie.

Mata
źródło
Po sudo chown -R user:user /tym jest prawdopodobne, że system jest tak źle zabezpieczony, że nie można przywrócić z kopii zapasowej.
Keith Thompson,
1
Jeśli nie możesz odzyskać ważnych części danych użytkownika w tym scenariuszu z kopii zapasowej, twoja „kopia zapasowa” tak naprawdę nie jest jedna. Jeśli nie możesz odzyskać całego systemu operacyjnego, powinieneś móc ponownie zainstalować bazę, a następnie przywrócić ją z kopii zapasowej. W takim przypadku najprawdopodobniej będzie potrzebował Live CD lub rozruchu sieciowego, ale jeśli twoja strategia tworzenia kopii zapasowych nie może się z tego zregenerować, to nie jest wystarczająco dobra.
Mat
Mój wcześniejszy komentarz był prawdopodobnie niejasny. Funkcjonujący system można przywrócić za pomocą samego systemu. Po wykonaniu chownopisanych czynności prawdopodobnie nie będziesz w stanie nic zrobić przed zainstalowaniem całego systemu od zera; system nawet nie ma rootkonta i sudonie będzie działać. Prawdopodobnie warto spróbować uruchomić się z powłoką dla jednego użytkownika, ale nie oczekuj, że zadziała.
Keith Thompson,
1
Konto root nie zniknęło (nadal jest to UID 0); po prostu nie ma już żadnych plików, ale root i tak omija normalne sprawdzanie uprawnień. To, sudoczy sunadal będzie działać, gdy wszystkie odpowiednie pliki są własnością, userto inna sprawa (prawdopodobnie nie dlatego, że między innymi zniknie bit SUID na exe).
jw013
6

Tylko jeśli znasz właściciela i grupę wszystkich plików i katalogów w twoim /katalogu.

Nawet wtedy masz już prawa własności do krytycznych plików systemowych, które muszą być własnością root, w tym sudopolecenia. Prawdopodobnie będziesz musiał zamontować dysk twardy w innym systemie - i pamiętaj, że ten drugi system prawdopodobnie nie będzie miał tego samego odwzorowania UID i GID jak ten, który właśnie zablokowałeś.

Zrób kopię całego dysku twardego, jeśli możesz, a następnie zainstaluj ponownie system operacyjny. Gdy to zrobisz, możesz spróbować skopiować pliki z powrotem do nowo wyczyszczonego systemu i przywrócić ich własność. Prawdopodobnie możesz założyć (choć nie w 100% niezawodnie), że wszystko pod /home/foojest własnością użytkownika fooi że każdy plik bufora poczty /var/mailjest własnością odpowiedniego użytkownika (jeśli masz e-mail w systemie). Prawdopodobnie możesz uciec bez przywracania większości plików, które nie są poniżej /home, w zależności od tego, co zrobiłeś z systemem.

A potem zacznij kultywować nawyk podwójnego sprawdzania każdego polecenia, pod którym biegniesz, sudo zanim uderzysz Enter.

Keith Thompson
źródło
6

Jeśli twoja dystrybucja oparta jest na RPM, możesz przywracać TYLKO pliki, które zostały zainstalowane przez pakiety RPM.

Aby przywrócić wszystkie uprawnienia do pakietu:

rpm --setperms -a

Aby przywrócić wszystkich właścicieli pakietów (użytkownik / grupa):

rpm --setugids -a

Jeśli -a nie działa, możesz wykonać pętlę bash:

Dla uprawnień:

for x in $(rpm -qa); do rpm --setperms $x; done

Dla właściciela:

for x in $(rpm -qa); do rpm --setugids $x; done

Wyodrębniono z: http://www.sysadmit.com/2016/10/linux-restaurar-permisos-de-un-paquete.html

Egon Spengler
źródło
1

Możesz zapisać bieżące wersje, a następnie przeanalizować je w celu przywrócenia za pomocą opcji -v.

chown -R nobody:nobody -v /tmp/some_file > /tmp/chown.log
cat /tmp/chown.log

Treść będzie:

changed ownership of `/tmp/some_file' from me:users to nobody:nobody

Używając swojego ulubionego języka skryptowego i wyrażeń regularnych, możesz wykonać bolesny proces przywracania ich (jeśli musisz).

Chciałbym gorąco polecam nie robi rekurencyjną Chown / jak będziesz narażać / etc / shadow lub innego ważnego pliku.

SailorCire
źródło
0

jeśli dystrybucja jest oparta na rpm:

rpm -a --setperms
shcherbak
źródło