Jedna věc se pokazila:použití sudo
s tím příkazem. -R
přepínač říká chmod
rekurzivně nastavit oprávnění k tomuto adresáři, což je v každém případě nedoporučená akce (měli bychom to nazývat:hereze), pokud nevíte, co děláte (jakmile se mi to stalo, nevěděl jsem zadejte příkaz, ale způsobilo to vadné grafické uživatelské rozhraní a můj systém se zhroutil).
Byla to pouze oprávnění k souboru. Proč se pak celý systém zdá být úplně vyhozený?
GNU/Linux je velmi citlivý na oprávnění k souborům, protože byl vytvořen se stabilitou a zabezpečením na mysli. Totéž platí pro většinu programů spuštěných v GNU/Linuxu (tj. apache2
zruší práva roota a použije www-data
, nebo podobný uživatel, a vaše 700
oprávnění by mu nedovolilo číst/zapisovat vlastní soubory).
Proč nyní nefungují žádná přihlašovací hesla?
Jak jste již zmínili, přihlašovací hesla jsou uložena v souboru /etc/passwd
a pouze root (předpokládám, že jste to nezměnili) jej může číst, ale výzva k přihlášení (nebo přihlášení k uživatelskému rozhraní) používá neprivilegovaný účet, a proto nemůže soubor přečíst.
Jak ale změna oprávnění všechno ohrozila?
Jak je uvedeno výše, Linux je velmi citlivý na oprávnění souborů. Některé programy dokonce kontrolují oprávnění svých konfiguračních souborů a pokud je neočekáváte, vůbec se nespustí.
Jak mohu vrátit svůj adresář etc do dřívějšího stavu?
Pokud používáte distribuci založenou na RPM, lze to provést pomocí rpm --setperms
příkaz, bylo by bolestné vracení balíčků jeden po druhém na systému podobnému Debianu apt-get --reinstall install
je tvůj přítel. Mohou být k dispozici i jiná řešení, ale vyžadovalo by to funkční systém.
Podívejme se, co jste udělali, je nastavení oprávnění v celém adresáři /etc jako čtení/zápis/spouštění povoleno pouze vlastníkovi souboru/adresáře, všem ostatním odepřeno. Pokud jste zmateni oprávněními k souborům, více si můžete přečíst na Wikipedii:Tradiční oprávnění UNIX.
Důvod, proč jste vyhodili svůj systém do povětří, je ten, že mnoho procesů již nemůže číst svá nastavení a nemají přístup k /etc. Nebude snadné obnovit celý adresář /etc do předchozího stavu. Jak to udělat bude záviset na vaší distribuci, ale v podstatě to znamená přeinstalovat každý balíček, který obsahuje jakýkoli soubor v /etc.
Jako rychlou pomůcku, abyste mohli používat systém, abyste jej mohli správně opravit (přeinstalovat všechny balíčky s obsahem v /etc, jak je uvedeno výše), můžete udělat:
# sudo find /etc -type d -exec chmod 775 '{}' \;
# sudo find /etc -type f -exec chmod 664 '{}' \;
S těmito dvěma řádky nastavíte liberální oprávnění ve všech adresářích /etc s povoleným čtením/zápisem pro vlastníka a skupinu a pro všechny ostatní. Důvodem dvou chmod je nastavení prováděcího bitu pouze na dirs. Některé procesy si budou stěžovat nebo selžou i tak, včetně jakéhokoli spustitelného souboru v /etc, ale měli byste být schopni provést přeinstalaci, kterou jsem nastínil výše.
Uvědomte si prosím, že dokud neobnovíte původní oprávnění, bude váš systém přinejmenším v nezabezpečeném stavu.