Speciální bity
Z MiS
(Rozdíly mezi verzemi)
(Pročištění poznámek) |
m (Odstraněna mylná informace, že umask funguje jako funkce XOR.) |
||
(Není zobrazeno 11 mezilehlých verzí od 1 uživatele.) | |||
Řádka 1: | Řádka 1: | ||
− | [[Category:VSE]] | + | [[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Uživatelské účty]][[Category:Linux]] |
− | [[Category:Informatika]] | + | |
− | [[Category:OSY]] | + | == Úvod == |
+ | * V systému Unix a systémech z něj vycházejících (Linux,...) se tradičně oprávnění pro přístup k souborům ukládala pomocí devíti bitů viz [[Nastavování práv]]. | ||
+ | * Dále se ovšem ukládaly a ukládají další tři speciální bity, které upravují chování programů a složek v některých specifických případech. | ||
+ | |||
== Set UID (SUID) == | == Set UID (SUID) == | ||
− | * | + | * Používá se pro spustitelné soubory (programy). |
− | * Program | + | * Program je spouštěn s právy vlastníka programu (jako by ho spustil vlastník). |
− | * | + | * (Standardně se program spustí s právy toho, kdo program spustil.) |
− | + | ; Nastavení SUID | |
− | + | ||
− | + | ||
chmod u+s program | chmod u+s program | ||
− | * POZOR!!! | + | ; Ověření SUID |
− | + | * Ve výpisu <code>ls -l</code>. | |
− | * | + | * Místo písmene <tt>x</tt> ve výpisu práv vlastníka se objeví: |
− | * | + | ** <tt>s</tt>... SUID + nastavené právo spouštět (<tt>x</tt>) |
− | ** | + | ** <tt>S</tt>... SUID bez práva spouštět |
− | ** | + | * Například: |
+ | ''$'' ls -l `which passwd` | ||
+ | ''-rw<span style="color:red">s</span>r-xr-x 1 root root 45396 kvě 25 2012 /usr/bin/passwd'' | ||
+ | |||
+ | <div class="Priklad">Příklad použití: | ||
+ | Například program <tt>/usr/bin/passwd</tt> (příkaz <tt>passwd</tt>) — pro nastavení hesla potřebuje právo zapisovat do souboru <tt>/etc/shadow</tt>, smí ale zapisovat jen hesla aktuálního uživatele! | ||
+ | </div> | ||
+ | <div class="Varovani">POZOR!!! | ||
+ | Nebezpečné, používá se výjimečně pouze pro velmi důvěryhodné a prověřené programy. | ||
+ | </div> | ||
+ | <div class="Poznamka">Upozornění! | ||
+ | Pro skripty a další interpretované programy (bash, Python, PHP,...) se SUID bit ve většině operačních systémů ignoruje! | ||
+ | |||
+ | (V Linuxu se SUID u skriptů ignoruje od verze jádra Linux 3.x.) | ||
+ | </div> | ||
+ | |||
+ | |||
+ | == Set GID (SGID) == | ||
+ | * Pro spustitelné soubory (programy): | ||
+ | ** Význam analogický jako SUID — program bude spouštěn s právy skupiny, která program vlastní. (Dnes ne moc používané.) | ||
+ | * Pro složky: | ||
+ | ** Pokud ve složce vytvořím soubor či složku, pak se vlastnická skupina převezme z nastavení složky. (Vlastník budu já.) | ||
+ | ** (Standardně bych vlastník byl také já, ale vlastnická skupina by byla moje primární skupina.) | ||
+ | ** Pokud vytvářím složku, zdědí vytvářená složka i SGID bit. | ||
+ | ; Nastavení | ||
+ | chmod g+s slozka | ||
+ | ; Výpis <code>ls -l</code>: | ||
+ | * Místo <tt>x</tt> v právech ''skupiny'': | ||
+ | **<tt>s</tt>... SGID + právo spouštět pro skupinu | ||
+ | **<tt>S</tt>... SGID - právo spouštět pro skupinu | ||
+ | <div class="Priklad"> | ||
+ | Používá se u sdílených složek, kde má právo vytvářet soubory skupina uživatelů. Nově vytvořené soubory tak budou opět vlastněny skupinou. | ||
+ | </div> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Sticky-bit == | == Sticky-bit == | ||
− | * | + | * Dnes obvykle používán pouze pro adresáře. |
− | * | + | * (Původně zamýšlená složitější funkčnost, i pro soubory.) |
− | + | * Pokud je u adresáře nastaven bit sticky, pak může v adresáři uživatel mazat ty soubory, jejichž je vlastníkem. | |
− | * | + | * (Standardně buď má uživatel právo zápisu do adresáře (<tt>w</tt>) a pak může mazat všechny soubory bez ohledu na vlastnictví, nebo nemá právo zápisu a nemůže mazat žádné soubory (ani svoje).) |
− | * | + | ; Nastavení |
− | + | chmod o+t adresar | |
− | chmod o+t | + | ; Výpis <code>ls -l</code>: |
− | + | * Místo <tt>x</tt> v právech ''ostatních uživatelů'': | |
− | * | + | ** <tt>t</tt>... „sticky“ + právo spouštět pro všechny uživatele |
− | ** | + | ** <tt>T</tt>... „sticky“ bez právo <tt>x</tt> pro všechny uživatele |
− | ** | + | |
+ | <div class="Priklad"> | ||
+ | Příklad použití: | ||
+ | * Je nastaven na složce <tt>/tmp</tt> (do ní si aplikace odkládají dočasné soubory). | ||
+ | </div> | ||
== umask == | == umask == | ||
− | * | + | * Nastavuje, jaká práva má mít nově vytvořený soubor. |
− | * | + | * Pokud vytvoříme soubor, pak: |
− | ** ten, | + | ** Vlastník: bude ten uživatel, který soubor vytvořil. |
− | + | ** Vlastnická skupina: primární skupina uživatele, který soubor vytvořil. | |
− | ** primární skupina | + | * Práva získáme tak, že bity nastavené příkazem <tt>umask</tt> odečteme od základní masky: |
− | * bity | + | ** základní maska pro soubory <tt>666</tt> (reprezentuje kombinaci <tt>rw-rw-rw-</tt>) |
− | ** základní maska pro soubory 666 | + | ** základní maska pro adresáře <tt>777</tt> (reprezentuje kombinaci <tt>rwxrwxrwx</tt>) |
− | ** základní maska pro adresáře 777 | + | * Standardní nastavení <tt>umask</tt> je <tt>022</tt>. |
− | * | + | <div class="Priklad"> |
+ | ; Příklad: | ||
+ | umask 007 | ||
+ | * Výpočet | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | ||Soubory ||Adresáře | ||
+ | |- | ||
+ | |Základ ||666 ||777 | ||
+ | |- | ||
+ | |Umask ||007 ||007 | ||
+ | |- | ||
+ | |Výsledek ||660 ||770 | ||
+ | |} | ||
+ | * Podrobněji po bitech: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | ||Soubory ||Adresáře | ||
+ | |- | ||
+ | |Základ||110 110 110||111 111 111 | ||
+ | |- | ||
+ | |Umask||000 000 111||000 000 111 | ||
+ | |- | ||
+ | |Výsledek||110 110 000||111 111 000 | ||
+ | |} | ||
+ | </div> | ||
+ | ; Symbolický zápis: | ||
+ | <code>práva = základ AND NOT(umask)</code> | ||
+ | * (Předpokládáme, že logické operace se provádí na každý bit zvlášť.) | ||
+ | |||
+ | <div class="Ukol"> | ||
+ | ; Úkol | ||
+ | * Jaká práva bude mít soubor/adresář vytvoření se standardním nastavením <tt>umask</tt>? | ||
+ | </div> | ||
+ | |||
+ | == Související stránky == | ||
+ | * [[Oprávnění pro přístup k souborům]], [[Nastavování práv]] | ||
+ | |||
− | == | + | == Další zdroje == |
− | * | + | * [http://en.wikipedia.org/wiki/Setuid Wikipedia → Set UID] |
+ | * [http://www.library.yale.edu/wsg/docs/permissions/sgid.htm Yale.edu → SGID pro sdílené složky] |
Aktuální verze z 27. 2. 2024, 08:00
Obsah |
Úvod
- V systému Unix a systémech z něj vycházejících (Linux,...) se tradičně oprávnění pro přístup k souborům ukládala pomocí devíti bitů viz Nastavování práv.
- Dále se ovšem ukládaly a ukládají další tři speciální bity, které upravují chování programů a složek v některých specifických případech.
Set UID (SUID)
- Používá se pro spustitelné soubory (programy).
- Program je spouštěn s právy vlastníka programu (jako by ho spustil vlastník).
- (Standardně se program spustí s právy toho, kdo program spustil.)
- Nastavení SUID
chmod u+s program
- Ověření SUID
- Ve výpisu
ls -l
. - Místo písmene x ve výpisu práv vlastníka se objeví:
- s... SUID + nastavené právo spouštět (x)
- S... SUID bez práva spouštět
- Například:
$ ls -l `which passwd`
-rwsr-xr-x 1 root root 45396 kvě 25 2012 /usr/bin/passwd
Příklad použití:
Například program /usr/bin/passwd (příkaz passwd) — pro nastavení hesla potřebuje právo zapisovat do souboru /etc/shadow, smí ale zapisovat jen hesla aktuálního uživatele!
POZOR!!!
Nebezpečné, používá se výjimečně pouze pro velmi důvěryhodné a prověřené programy.
Upozornění!
Pro skripty a další interpretované programy (bash, Python, PHP,...) se SUID bit ve většině operačních systémů ignoruje!
(V Linuxu se SUID u skriptů ignoruje od verze jádra Linux 3.x.)
Set GID (SGID)
- Pro spustitelné soubory (programy):
- Význam analogický jako SUID — program bude spouštěn s právy skupiny, která program vlastní. (Dnes ne moc používané.)
- Pro složky:
- Pokud ve složce vytvořím soubor či složku, pak se vlastnická skupina převezme z nastavení složky. (Vlastník budu já.)
- (Standardně bych vlastník byl také já, ale vlastnická skupina by byla moje primární skupina.)
- Pokud vytvářím složku, zdědí vytvářená složka i SGID bit.
- Nastavení
chmod g+s slozka
- Výpis
ls -l
- Místo x v právech skupiny:
- s... SGID + právo spouštět pro skupinu
- S... SGID - právo spouštět pro skupinu
Používá se u sdílených složek, kde má právo vytvářet soubory skupina uživatelů. Nově vytvořené soubory tak budou opět vlastněny skupinou.
Sticky-bit
- Dnes obvykle používán pouze pro adresáře.
- (Původně zamýšlená složitější funkčnost, i pro soubory.)
- Pokud je u adresáře nastaven bit sticky, pak může v adresáři uživatel mazat ty soubory, jejichž je vlastníkem.
- (Standardně buď má uživatel právo zápisu do adresáře (w) a pak může mazat všechny soubory bez ohledu na vlastnictví, nebo nemá právo zápisu a nemůže mazat žádné soubory (ani svoje).)
- Nastavení
chmod o+t adresar
- Výpis
ls -l
- Místo x v právech ostatních uživatelů:
- t... „sticky“ + právo spouštět pro všechny uživatele
- T... „sticky“ bez právo x pro všechny uživatele
Příklad použití:
- Je nastaven na složce /tmp (do ní si aplikace odkládají dočasné soubory).
umask
- Nastavuje, jaká práva má mít nově vytvořený soubor.
- Pokud vytvoříme soubor, pak:
- Vlastník: bude ten uživatel, který soubor vytvořil.
- Vlastnická skupina: primární skupina uživatele, který soubor vytvořil.
- Práva získáme tak, že bity nastavené příkazem umask odečteme od základní masky:
- základní maska pro soubory 666 (reprezentuje kombinaci rw-rw-rw-)
- základní maska pro adresáře 777 (reprezentuje kombinaci rwxrwxrwx)
- Standardní nastavení umask je 022.
- Příklad
umask 007
- Výpočet
Soubory | Adresáře | |
Základ | 666 | 777 |
Umask | 007 | 007 |
Výsledek | 660 | 770 |
- Podrobněji po bitech:
Soubory | Adresáře | |
Základ | 110 110 110 | 111 111 111 |
Umask | 000 000 111 | 000 000 111 |
Výsledek | 110 110 000 | 111 111 000 |
- Symbolický zápis
práva = základ AND NOT(umask)
- (Předpokládáme, že logické operace se provádí na každý bit zvlášť.)
- Úkol
- Jaká práva bude mít soubor/adresář vytvoření se standardním nastavením umask?
Související stránky