Sticky bit
Ve výpočetní technice, se termínem sticky bit rozumí jeden ze speciálních příznaků přístupových oprávnění v UNIXu, které mohou být přiřazeny souborům a adresářům.
Historie
Sticky bit byl představen s příchodem páté edice Unixu pro použití ve spojitosti se spustitelnými soubory. Když byl nastaven, operační systém ponechal textový segment programu ve swapovacím prostoru i po skončení běhu procesu. Toto urychlilo všechna další spuštění tím, že program mohl být kernelem přesunut ze swapovací oblastí do oblasti paměti jedinou operací. Díky tomu, často používané programy, jako třeba textové editory, se mohly spouštět výrazně rychleji. Používání sticky bitu ale disponovalo neduhem, jenž se projevoval v momentě, kdy bylo potřeba nahrát novou verzi tohoto spustitelného souboru (například ho aktualizovat). Aby tato modifikace byla úspěšná a ihned funkční, bylo třeba odebrat sticky bit z onoho souboru, spustit program a následně ho vypnout (za účelem vyprázdnění cache), teprve nyní přehrát starý soubor novým a nakonec obnovit sticky bit.
V současnosti se toto chování uplatňuje u HP-UX, NetBSD, a UnixWare. Zdá se, že Solaris od tohoto opustil v roce 2005. BSD ve verzi 4.4-Lite zachoval původní chování sticky bitu, avšak bylo následně odebráno z OpenBSD (od verze 3.7) a FreeBSD (od verze 2.2.1). V NetBSD bylo ponecháno. Toto tradiční chování nikdy nebylo implementováno žádnou z verzí Linuxu.
Užití
Dnes se funkcionalita sticky bitu nejčastější využívá na adresáře. Pokud je na nějakém nastaven, pouze vlastník objektu, vlastník adresáře, nebo správce počítače může přejmenovávat či mazat položky v tomto adresáři. Bez nastaveného sticky bitu, kdokoli s právy zápisu a spuštění na adresáři, by mohl přejmenovávat či mazat položky v něm obsažené, nehledě na to, kdo je jejich vlastníkem. Typicky se tento příznak používá pro adresář /tmp
, aby nedocházelo k tomu, že běžní uživatelé budou mazat či přesouvat soubory ostatních uživatelů. Tuto funkcionalitu představil v roce 1986 systém 4.3BSD a dnes je k nalezení v nejmodernějších unixových systémech.
Navíc, Solaris (od Solaris 2.5) definoval speciální chování v případě, že je sticky bit nastaven na nespustitelných souborech: když je k takovým souborům přistoupeno, nejsou kernelem ukládány do Cache. Této vlastnosti se může příležitostně využívat pro testování výkonu.
Sticky bit je nastavován rovněž automounterem, aby indikoval, že soubor doposud nebyl namountovan. To umožňuje programům jako ls ignorovat nenamountované vzdálené soubory.
Operační systém | Volně přeložený výňatek z manuálových stránek týkající se sticky bitu | Odkazy |
---|---|---|
AIX 5.2 | Pro adresáře: indikuje, že pouze vlastníci souborů mohou přejmenovat nebo smazat soubory ve specifikovaném adresáři. Pro soubory: nastavuje save-text atribut. | AIX chmod (2) |
Solaris 11 | Pokud běžný soubor není spustitelný a má nastavený S_ISVTX, předpokládá se, že se jedná o swapovací soubor. V tomto případě, systémová vyrovnávací paměť nebude použita pro uchování dat souboru. Pokud je S_ISVTX bit nastaven na jiném typu souboru, výsledek není blíže specifikován. Pokud je adresář zapisovatelný a má nastaven S_ISVTX (sticky bit), soubory v tomto adresáři mohou být odebrány či přejmenovány pouze pokud platí něco z následujícího: uživatel vlastní soubor, uživatel vlastní adresář, uživatel má právo zápisu do souboru, uživatel je privilegovaný. | Solaris chmod(2) |
HP-UX | [...] zabraňuje systému ve smazání textové části programu ze swapovacího prostoru, v momentě, kdy s ním poslední uživatel přestane pracovat. V momentě, kdy je tento program spuštěn dalším uživatelem, nemusí se data číst znovu ze souborového systému, nýbrž se využije již nahraný program ve swapovací oblasti, což šetří čas. | hp-ux chmod(2) |
Linux | [...] Linuxové jádro ignoruje nastavený sticky bit na souborech. [...] Pokud je sticky bit nastaven na adresáři, soubory, obsažené v tomto adresáři, mohou být smazány či přejmenovány pouze rootem a nebo jejich vlastníkem. | Linux chmod(1) (from 2002) |
FreeBSD | FreeBSD VM systém naprosto ignoruje sticky bit (ISVTX) pro spustitelné soubory. Pokud je ISVTX ('sticky bit') nastaven na adresáři, neprivilegovaný uživatel není schopen smazat nebo přejmenovat soubory, které vlastní jiný uživatel. | FreeBSD chmod(2) |
Mac OS X (Leopard) | ISVTX (sticky bit) nemá žádný efekt na spustitelné soubory. Veškerá optimalizace textových částí programu sídlících ve swapovacím prostoru je obhospodařena virtual memory systémem kernelu. Adresář, jehož 'sticky bit' je nastaven, se stává pouze přírůstkovým adresářem. Lépe řečeno adresářem, ve kterém je mazání souborů zakázané. Soubor v adresáři označeném sticky bitem může být odstraněn nebo přejmenován pouze, pokud má uživatel právo zápisu do adresáře a je vlastníkem souboru, je vlastníkem adresáře, nebo správcem systému. Tato vlastnost se hodí pro adresáře jako /tmp , do kterých musí být možnost zapsat komukoli, ale nemělo by v nich být možné mazat či přejmenovávat soubory ostatních uživatelů. Jakýkoli uživatel může vytvořit adresář s definovaným sticky bitem. | Mac OS X sticky(8) |
NetBSD | Sticky bit na souborech může být nastaven, ale nemá to žádný efekt. Rezervováno pro budoucí použití. | NetBSD sticky(8) Archivováno 13. 4. 2014 na Wayback Machine. |
OpenBSD | Sticky bit na souborech může být nastaven, ale nemá to žádný efekt. | OpenBSD sticky(8)[nedostupný zdroj] |
SCO UnixWare | Pokud spustitelný soubor s přístupovými právy 0410 má nastaven sticky bit, operační systém nesmaže textovou část programu ze swapovací oblasti, i když s procesem přestane pracovat poslední uživatel. Pokud má sticky bit nastaven soubor s právy 0413 nebo soubor ELF, operační systém nesmaže textovou část programu z paměti v momentě, kdy i poslední uživatel tento proces ukončí. V obou případech, pokud byl sticky bit nastaven, textová část již bude přednačtena (ať už ve swapovací oblasti či v paměti), až se bude tento program volat znovu, čímž bude vykonání programu probíhat rychleji. | Unixware chmod(2) |
Příklady
Sticky bit může být nastaven použitím příkazu chmod, a to v jeho oktalovém tvaru 1000 nebo jeho symbolem t (s je již zarezervováno pro setuid bit). Například, abychom nastavili tento bit na adresář /usr/local/tmp
, bude potřeba napsat chmod +t /usr/local/tmp
. Nebo, pro ujištění, že adresář tmp
bude mít standardní oprávnění, lze napsat chmod 1777 /usr/local/tmp
.
Pro odebrání, použijeme chmod -t /usr/local/tmp
nebo chmod 0777 /usr/local/tmp
(použití numerického módu rovněž nastaví standardní oprávnění na adresář tmp
.
V Unixovém symbolickém zápisu přístupových oprávnění, je sticky bit reprezentován písmenem t na posledním místě. Například na Solaris 8, se /tmp
adresář, který ve výchozím stavu má sticky bit nastaven, ukazuje ve výpisu jako:
$ ls -ld /tmp
drwxrwxrwt 4 root sys 485 Nov 10 06:01 /tmp
Pokud je sticky bit nastaven na souboru či adresáři, jenž nemá povolené práva spuštění pro ostatní kategorii uživatelů (tedy uživatele a skupinu, která není vlastníkem souboru), je indikován zápisem s velkým T:
$ ls -l test
-rw-r--r-- 1 root other 0 Nov 10 12:57 test
$ chmod +t test; ls -l test
-rw-r--r-T 1 root other 0 Nov 10 12:57 test
Související články
Reference
V tomto článku byl použit překlad textu z článku Sticky bit na anglické Wikipedii.