Od uživatele root zkontrolujte atributy souborů
# lsattr
pokud si všimnete i
(neměnné) nebo a
(pouze append), odeberte tyto atributy:
# man chattr
# chattr -i [filename]
# chattr -a [filename]
Nejčastější důvod rm
stěžovat si, že nemáte oprávnění k odstranění souboru, je to, že oprávnění v adresáři vám zakazují soubor smazat. Chcete-li smazat soubor, potřebujete oprávnění k zápisu do adresáře. Oprávnění k souboru jsou irelevantní (rm
bez -f
vyzve k potvrzení před odstraněním souboru pouze pro čtení, ale to je pouze potvrzení, nikoli omezení). Na některých variantách Unixu, jako je OSX (ale ne Linux), může ACL na souboru zabránit jeho vymazání; ls -l
zobrazí @
na konci pole oprávnění, pokud byl v souboru záznam ACL.
Přístup jako root obchází oprávnění, takže root může mazat soubory i v adresáři pouze pro čtení.
Výstup z ls -l
ukazuje .
na konci sloupce povolení. To znamená, že soubor má kontext zabezpečení SELinux. Na rozdíl od základních oprávnění a ACL může kontext zabezpečení SELinux u souboru řídit, kdo smí soubor odstranit. Navíc SELinux nemůže být vždy obejit rootem (je možné mít proces spuštěný jako ID uživatele 0, ale s tak malým počtem práv, jak zvolil návrhář politik SELinuxu). Chcete-li vidět, co vám kontext SELinux umožňuje, spusťte ls -lZ . exam_a
.
Další věcí, která může zabránit smazání souboru, je, pokud má soubor nebo adresář, který jej obsahuje, atribut Linux pouze pro připojení nebo neměnný. Spusťte lsattr -d . exam_a
pro zobrazení atributů Linuxu. Pokud a
nebo i
je zapnutý, budete jej muset odstranit (chattr -a -i . exam_a
) za účelem smazání souboru; to umí jen root. Root nemůže tyto atributy obejít, aby smazal soubor, atributy musí být nejprve vypnuty.
Ještě další věc, která brání smazání souboru, je, pokud je souborový systém připojen pouze pro čtení, ale v takovém případě byste dostali jinou chybovou zprávu.