Pokud vytvořím soubor a poté změním jeho oprávnění na 444
(pouze pro čtení), jak to, že rm
lze jej odstranit?
Pokud udělám toto:
echo test > test.txt
chmod 444 test.txt
rm test.txt
…rm
se zeptá, zda chci odstranit soubor chráněný proti zápisu test.txt
. Očekával bych, že rm
nelze takový soubor odstranit a že bych musel provést chmod +w test.txt
za prvé. Pokud udělám rm -f test.txt
pak rm
odstraní soubor, aniž by se zeptal, i když je pouze pro čtení.
Může někdo objasnit? Používám Ubuntu 12.04/bash.
Přijatá odpověď:
Vše rm
potřebuje oprávnění k zápisu + spouštění v nadřazeném adresáři. Oprávnění samotného souboru jsou irelevantní.
Zde je odkaz, který vysvětluje model oprávnění jasněji, než jsem kdy mohl:
Jakýkoli pokus o přístup k datům souboru vyžaduje oprávnění ke čtení. Jakýkoli
pokus o úpravu dat souboru vyžaduje oprávnění k zápisu. Jakýkoli
pokus o spuštění souboru (programu nebo skriptu) vyžaduje oprávnění ke spuštění
…Protože se adresáře nepoužívají stejným způsobem jako běžné soubory, oprávnění
fungují mírně (ale jen mírně) odlišně. Pokus
o výpis souborů v adresáři vyžaduje oprávnění ke čtení pro adresář
, ale ne pro soubory v něm. Pokus o přidání souboru do
adresáře, smazání souboru z adresáře nebo přejmenování souboru, všechny
vyžadují oprávnění k zápisu do adresáře, ale (možná překvapivě)
ne pro soubory uvnitř. Oprávnění k provedení se nevztahuje na
adresáře (adresář nemůže být zároveň program). Ale tento
bit oprávnění je znovu použit pro adresáře pro jiné účely.K adresáři je potřeba oprávnění ke spuštění, abyste do něj mohli cd
(to znamená, aby se nějaký adresář stal vaším aktuálním pracovním adresářem).Pro přístup k informacím „inode“
souborů v adresáři je potřeba provést příkaz. Potřebujete to k prohledání adresáře pro čtení
inodů souborů v něm. Z tohoto důvodu se oprávnění ke spuštění v
adresáři místo toho často nazývá oprávnění k vyhledávání.