Jak zresetować uprawnienia do folderów do wartości domyślnych w Ubuntu?

19

Niedawno wpisałem polecenie

sudo chmod 777 -R /

po tym niektóre rzeczy jak

sudo -i

nie działają normalnie. Zastanawiam się więc, czy jest jakiś sposób, aby zresetować uprawnienia do folderu do ich oryginalnego stanu?

Braiam
źródło
Nie sądzę, że Linux pamięta poprzednie ustawienia uprawnień. Spróbuj utworzyć nowy plik i sprawdź, jakie ustawienia uprawnień uzyska.
thecoshman
Och, czekaj, widzę, co tam zrobiłeś. Jest to prawdopodobnie sytuacja ponownego instalowania. Po prostu wykonaj kopię zapasową danych i zanotuj zainstalowane aplikacje. Baw się dobrze, dlaczego nie spróbować 10.4! (najlepsze imię kiedykolwiek ... co to znaczy radio?)
thecoshman
Odważę się znaleźć jedną osobę, która nie zrobiła tego dokładnie: D to bardzo trudna sytuacja. możesz to naprawić, wypróbuj odpowiedź jlovi, ale zajmie to trochę czasu i wysiłku i będzie frustrujące. po prostu zainstaluj ponownie i załatw sprawę. I nigdy nie używaj sudo chmod, chyba że wiesz, co robisz.
Jack Mayerz,

Odpowiedzi:

17

Z tej niechlujnej sytuacji można wrócić.

Uruchomiłem ponownie ten sam rodzaj problemu (jakiś błąd w pisanym przeze mnie skrypcie) i rozwiązałem go, ale musisz poprosić o pomoc eksperta. Bądź bardzo ostrożny!

Po pierwsze, moja sytuacja była łatwiejsza do rozwiązania, ponieważ miałem system podwójnego rozruchu (Ubuntu i moją starą instalację Fedory), ale uruchamianie systemu operacyjnego z dysku CD / DVD lub klucza USB powinno robić to samo.

MPOINT=/mount/ubuntu

Najpierw zamontowałem takie systemy plików w ten sposób (nie zapomnij utworzyć punktów montowania):

mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home

Następnie uruchomiłem następujące polecenie (mój problem był tylko w kilku - krytycznych - katalogach), aby skopiować uprawnienia z działającego systemu do bałaganu (w rzeczywistości, w moim przypadku, zainstalowałem system Ubuntu w Virtual Box pod Fedorą i mam tam uprawnienia):

find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh

A potem uruchomiłem skrypt restoreperms.sh.

Ponownie mogłem uruchomić system Ubuntu.

Zawartość pliku restoreperms.sh będzie wyglądać następująco:

(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)

Nie przetestowałem tego, ale musi działać również dla właścicieli i grup właścicieli. Coś jak:

find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^

(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)

Oczywiście musisz tutaj uważać, aby UID i GID były takie same w obu systemach, ale dla użytkowników i grup związanych z systemem nie powinno to stanowić problemu.

Edytować:

Ponadto ustawienie właściciela anuluje flagi SGID i SUID , co powoduje dziwne problemy (na przykład nie będziesz w stanie wykonać sudo, chyba że zezwolenie to 4755). Musisz i powinieneś ustawiać uprawnienia PO ustawieniach właścicieli. ZAPISZ pełne informacje o uprawnieniach do plików wraz z danymi właściciela.

Rk:

  1. Ważną rzeczą jest synchronizacja dysku instalacyjnego z używaną wersją lub przynajmniej praca z bieżącą wersją Ubuntu.
  2. Teraz mam te polecenia w koledze, uruchamiane codziennie (może być tygodnie) w celu zachowania tych informacji. Ułatwi to rozwiązanie następnym razem, ale oczywiście, ponieważ mam to teraz, nigdy więcej się nie powtórzy. ;-) Coś takiego:

    0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2

    0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2

Właściwe (połączone) polecenie jest bardziej jak:

`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`

Należy pamiętać, że może być wymagana dodatkowa ostrożność w celu uwzględnienia nawiasów w nazwach plików (na przykład w ustawieniach regionalnych) i że chown może po cichu rozbroić bity setuid i setgid ustawione przez chmod. W tym drugim przypadku, który złamałby, powiedzmy, / bin / su i / usr / bin / sudo, być może będziesz musiał zamienić kolejność wykonywania klauzul powyżej.

jlovi
źródło
po prostu doskonała odpowiedź. Wskazałem na to w Ask Ubuntu
Private
Dla mnie idealne rozwiązanie!
2

Po odzyskaniu sudo lub wybraniu trybu odzyskiwania przy rozruchu

Jest to możliwe, aby odzyskać cały system za pomocą debsums że sprawdzenia zgodności integralności plików i uprawnień.

ze strony podręcznika:

apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)

Ponownie instaluje pakiety ze zmienionymi plikami

lub ograniczony do określonej ścieżki, np . /usr:

apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/usr ) | cut -d : -f 1 | sort -u)

lub ograniczony do wielu zestawów ścieżek, np .: /sbin /etc /var

apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/etc -e ^/sbin -e ^/var  ) | cut -d : -f 1 | sort -u)
Ivan Buttinoni
źródło
czy debsums naprawdę sprawdza uprawnienia? Próbowałem chmod a-x /bin/pingi debsums -cnie zgłosiłbym tego pliku.
reox
0

Zawsze uważaj na to, co prowadzisz jako sudo.

Wątek wyjaśnia, że ​​możesz ręcznie ustawić niektóre uprawnienia z powrotem, a skrypt w tym pomaga, ale nadal jest to duże zadanie. Zamiast tego postępuj zgodnie ze wskazówkami na bieżniku, aby zapisać zainstalowane pakiety (oznaczenia) i ponownie zainstalować system operacyjny, a także zastosować zapisane zapisy pakietów, aby odzyskać aplikacje.

odwracać
źródło
0

O ile mi wiadomo, tylko pakiety Systemu V i RPM oferują polecenie naprawy uprawnień do plików. W systemie V (Solaris) jest to pkgchk, z RPM-ami to rpm --setperms.

Niestety wydaje się, że takie polecenie nie istnieje dla pakietów Debian / Ubuntu - ale mogę się tutaj mylić.

Ale nawet przy pomocy tych poleceń przywrócenie systemu do normalnego stanu nie jest trywialne, a naprawiając go, możesz łatwo spowodować nowe szkody w systemie - jeśli nie będziesz ostrożny.

Poza tym Józef powiedział, nie jesteś pierwszy i nie będziesz ostatnim, który wprowadzi takie polecenie. Ale sam pomysł, aby zmienić uprawnienia do pliku na 777 w systemie Unix, jest silnym sygnałem, że nie masz zbyt dużego doświadczenia z tego rodzaju systemem. W tej sytuacji najlepiej jest wykonać kopię zapasową potrzebnych danych (katalogów domowych, plików konfiguracyjnych, plików poczty?) I spróbować nowej instalacji.

I powinieneś bardzo, bardzo ostrożnie przywracać - uszkodzone - pliki kopii zapasowych.

Powodzenia!

PS: Zastanawiam się tylko, jaki problem chciałeś rozwiązać?

kdo
źródło
0

Wow, zabiłeś to. Nie żyje! Spróbuj zalogować się i używać komputera jako root (ponieważ go włączyłeś), a następnie zmień członkostwo grupy root na użytkowników. To może, ale nie musi działać, ponieważ nigdy wcześniej tego nie próbowałem, ale warto spróbować.

slhck
źródło
0

Nie można cofnąć chmodoperacji; przynajmniej nie w sensie cofania się do poprzedniego ustawienia, czego wymaga ta sytuacja. Prawdopodobnie można cofnąć chmodoperację, chmodprzywracając każdy plik i katalog do oryginalnego trybu - ale nie wszystkie są takie same; ustalenie oryginalnych trybów jest trudne (jak omówiono w innych odpowiedziach).

Svisstack
źródło