Przypadkowo pobiegłem
sudo chmod 755 -R /
zamiast
sudo chmod 755 -R ./
Zatrzymałem go po kilku sekundach, ale teraz są pewne problemy, takie jak
sudo: must be setuid root
Jak mogę przywrócić uprawnienia z powrotem?
permissions
sudo
chmod
fl00r
źródło
źródło
sudo
oznacza, że dwukrotnie zastanowiłeś się, co zrobisz!Upgrade from Ubuntu 11.04 to Ubuntu 11.04
. Zaakceptuj tę opcję, aby skutecznie i bezboleśnie ponownie zainstalować dla ciebie Ubuntu./
na końcu nazwy katalogu, aby określić katalog jako cel. To zły nawyk , nie rób tego, nigdy ! Jest.
to sama poprawna nazwa katalogu, nie ma potrzeby dołączania/
do niej. Gdyby wszyscy przestrzegali tej zasady, wówczas bardzo źle wpisanesudo
operacje nie miałyby wpływu na katalog główny, więc ich systemy nie wyrządziłyby szkody. Nie rób tego!cd .
na przykład nic nie robi.ls .
jest taki sam jakls
. Ponadto,..
jest to nazwa katalogu, co oznacza „rodzica.
”, i prawdopodobnie znał go już./
na końcu. Jeśli chcesz zrobić rozszerzenie nazwy ścieżki tylko dla katalogów. Przykład umieszczenia katalogów w bieżącym katalogu:echo */
Odpowiedzi:
Krótko mówiąc: nie możesz ponownie zainstalować systemu.
Mam na myśli, że uprawnienia Posix są używane i są w dużej mierze oparte; w systemie plików jest wiele miejsc, w których nieprawidłowe uprawnienia mogłyby uszkodzić system operacyjny (flagi SUID) lub, co gorsza, spowodować, że będzie narażony na bezpieczeństwo (
/etc/ssh/ssh_host_rsa_key
), podczas gdy wydaje się, że działa poprawnie.Dlatego takie odzyskanie jest trudne do prawidłowego wykonania. Tęsknisz za jedną rzecz - a ty spieprzysz to. Ty już nie przejmował się swoją
sudo chmod
komendę (jeśli to twój przyjaciel raczej niż ty, może ona także nauczyć się lekcji Linux, zbyt) - i to jest bardzo proste polecenia. Prawidłowe wyleczenie wymagałoby znacznie większej liczby poleceń i większej czujności. Nawet jeśli używasz czyjś skrypt.Zaufaj mi, po prostu zainstaluj ponownie. Jest to bezpieczny zakład, który gwarantuje, że unikniesz kłopotów.
Na koniec kilka istotnych wskazówek tutaj.
Po pierwsze: ponowna instalacja będzie mniej bolesna, jeśli następnym razem skonfigurujesz swoją
/home
partycję na osobnej partycji . W rzeczywistości będą łatwe.Po drugie: rozważ zrobienie szalonej nauki o Linuksie na maszynie wirtualnej, takiej jak VirtualBox, i rób migawki.
Po trzecie:
chmod -R .
działa. Sama kropka.
jest prawidłową nazwą katalogu. Nie ma potrzeby dołączania tego slasha. Mogłeś uniknąć katastrofalnego ryzyka pominięcia kropki w całości;zwykły
chmod: missing operand after ‘755’
VS zrujnowany system.źródło
sudo
oznacza, że musisz sprawdzić dwa razy.Napisałem i używam od kilku lat kilku skryptów Ruby do
rsync
uprawnień i własności. Skryptget-filesystem-acl
zbiera wszystkie informacje, rekurencyjnie przechodząc przez wszystkie pliki i umieszczając je w pliku.acl
. Skrypt.acl-restore
odczyta.acl
i zastosuje wszystkiechown
„ichmod
”.Możesz uruchomić
get-filesystem-acl
podobną instalację Ubuntu, a następnie skopiować.acl
plik do skrzynki uszkodzonej przez chmod, umieścić.acl
i.acl-restore
w /, i uruchomić.acl-restore
.Musisz mieć root, więc napraw swoje,
sudo
jak sugerował Marco Ceppi.Mogę wygenerować i dać
.acl
plik dla mojego Ubuntu.get-filesystem-acl
.acl-restore
źródło
owner_id
jest zdefiniowanyfind SOME_DIR -depth -printf 'chmod %m %p\n' > saved_permission
W dłuższej perspektywie: możesz. Musisz zamontować system plików z Live CD i zacząć cofać uprawnienia w odpowiednich miejscach. Przynajmniej, aby odzyskać sudo, będziesz chciał uruchomić
sudo chmod u+s /usr/bin/sudo
podczas sesji LiveCD - to naprawi roota setuid.Prawdopodobnie łatwiej byłoby po prostu ponownie zainstalować system.
źródło
Spróbowałbym ponownie zainstalować wszystkie pakiety za pomocą
apt-get install --reinstall
, prawdopodobnie używając danych wyjściowych z,dpkg --get-selections | grep install
aby uzyskać ich listę.źródło
sudo apt-get autoremove
?autoremove
usuwa tylko pakiety, które nie zostały zainstalowane ręcznie.apt-mark auto $pkg
/,apt-mark manual $pkg
które pozwalają modyfikować status „ręcznie zainstalowanego / automatycznie zainstalowanego” dla pakietu.W porządku, nie testowałem tego (więc używaj na własne ryzyko), ale nadal może działać. Przetestuję to na maszynie wirtualnej, gdy mam szansę:
Po pierwsze, w wciąż działającym systemie zrobiłem następujące czynności, aby uzyskać wszystkie uprawnienia do plików na liście, pomijając
/home/
katalog:Spowoduje to wydrukowanie uprawnień i nazwy pliku dla każdego pliku lub katalogu w systemie, a następnie
\0
znaku (jest to potrzebne później, aby poradzić sobie z dziwnymi nazwami plików, takimi jak te zawierające nowe wiersze).Następnie w systemie, w którym naruszono uprawnienia do plików:
Spowoduje to odczytanie każdego wiersza
fileper.log
, zapisanie uprawnień jako$perm
i nazwy pliku jako,$file
a następnie ustawi uprawnienia pliku (lub katalogu) na wszystko, co było wymienione wfileper.log
Kilka rzeczy do odnotowania tutaj:
/tmp/fileper.log
możesz wyświetlać ustawienia niestandardowe, proc itp.Sugeruję, aby uruchomić LiveCD z wersją Linuksa, którą masz na dysku, uruchomić polecenie, zmodyfikować ścieżkę do miejsca, w którym jest podłączony dysk lokalny, i uruchomić drugie polecenie!
Przetestowałem, że po uruchomieniu z Ubuntu CD / USB mogę nie formatować dysku, co oznacza, że zastąpi wszystko w
/
katalogu, ALE pominie/home/
katalog. Oznacza to, że użytkownicy będą mieć nienaruszoną konfigurację aplikacji / danych (muzyka, wideo, dokumenty). I zastępując pliki systemowe,chmod
ustawia się tam odpowiedni numer.źródło
chmod $(echo $LINE)
zamiast tylkochmod $LINE
? Ponadto, można użyć tylkofind
bezstat
:find … -printf "%#m %p\n"
. Jeszcze lepiej, możesz utworzyć całe poleceniefind … -printf "chmod %#m %p\n"
:, a następnie wykonać plik jako skrypt.michael@NEXUS-TWO:~$ sudo find / -name '*' -exec stat -c "%a %n" {} \; >> /tmp/fileper.log
ale równie dobrze biegnie/proc
i inne miejsca, których możesz nie chcieć na liście.(Wiem, że nie powinienem komentować odpowiedzi, ale nie mam wystarczającej reputacji, aby komentować).
Odpowiedź blade19899 działała dla mnie z wyjątkiem dowiązań symbolicznych. Np. Zastosował 755 do / bin / bash, ale następnie zastosował 777 do dowiązania symbolicznego / bin / rbash, skutecznie 777-ing / bin / bash.
Ponieważ miałem już plik fileper.log, właśnie zmodyfikowałem polecenie destination-end:
źródło
chmod
.... effectively 777-ing /bin/bash
- nie; nie tak to działa. Czy mówisz, że mogę zastąpić/usr/bin/apt
własną rzeczą jako użytkownik inny niż root , pisząc do niej za pomocą dowiązania symbolicznego 777? :) Ćwicz krytyczne myślenie; dowiązania symboliczne nie mogą i nie działają w ten sposób. 777 uprawnień do dowiązań symbolicznych jest wspólne i normalne.Możesz spróbować przywrócić uprawnienia za pomocą
apt-get
.Jeśli nie możesz uruchomić tych poleceń za pomocą sudo, może być konieczne uruchomienie systemu w trybie odzyskiwania i uruchomienie ich jako root.
Aby uruchomić system w trybie odzyskiwania, zobacz https://wiki.ubuntu.com/RecoveryMode .
Od http://hyperlogos.org/page/Restoring-Permissions-Debian-System
Uwaga: pierwotnie został opublikowany na forach Ubuntu, ale nie mogę znaleźć oryginalnego postu.
Spróbuj w kolejności
Jeśli to się nie powiedzie:
I wreszcie, w ostateczności
Korzystanie z apt-get
Oto odpowiedni fragment, ZMIENIONO DLA POPRAWNOŚCI i sformatowany:
źródło