Speciální bity

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Vytvoření stránky)
 
m (Odstraněna mylná informace, že umask funguje jako funkce XOR.)
 
(Není zobrazeno 12 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]]
+
  
*Rozšíření
+
== Úvod ==
**SUID, SGID, Sticky bit
+
* 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]].
***SUID
+
* 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
+
 
****pro spustitelné soubory
+
 
****Program bude spouštěn s právy vlastníka programu.
+
== Set UID (SUID) ==
*****nikoli toho, kdo program spustil
+
* Používá se pro spustitelné soubory (programy).
****Příklad použití:  
+
* Program je spouštěn s právy vlastníka programu (jako by ho spustil vlastník).
*****např. /usr/bin/passwd
+
* (Standardně se program spustí s právy toho, kdo program spustil.)
****nastavení
+
; Nastavení SUID
*****chmod u+s program
+
chmod u+s program
*****POZOR!!!
+
; Ověření SUID
******Nebezpečné, pouze velmi důvěryhodné programy.
+
* Ve výpisu <code>ls -l</code>.
****výpis ls -l
+
* Místo písmene <tt>x</tt> ve výpisu práv vlastníka se objeví:
*****-rwsr...
+
** <tt>s</tt>... SUID + nastavené právo spouštět (<tt>x</tt>)
*****s... SUID + právo spouštět
+
** <tt>S</tt>... SUID bez práva spouštět
*****S... SUID - právo spouštět
+
* Například:
***SGID
+
''$'' ls -l `which passwd`
****pro spustitelné soubory
+
''-rw<span style="color:red">s</span>r-xr-x 1 root root 45396 kvě 25  2012 /usr/bin/passwd''
****Program bude spouštěn s právy skupiny, která program vlastní
+
 
****nastavení
+
<div class="Priklad">Příklad použití:
*****chmod g+s program
+
Například program <tt>/usr/bin/passwd</tt> (příkaz <tt>passwd</tt>) &mdash; pro nastavení hesla potřebuje právo zapisovat do souboru <tt>/etc/shadow</tt>, smí ale zapisovat jen hesla aktuálního uživatele!
****výpis ls -l
+
</div>
*****?????s???
+
<div class="Varovani">POZOR!!!
*****s... SGID + právo spouštět pro skupinu
+
Nebezpečné, používá se výjimečně pouze pro velmi důvěryhodné a prověřené programy.
*****S... SGID - právo spouštět pro skupinu
+
</div>
***sticky-bit
+
<div class="Poznamka">Upozornění!
****pro adresáře
+
Pro skripty a další interpretované programy (bash, Python, PHP,...) se SUID bit ve většině operačních systémů ignoruje!
*****původně zamýšlená složitější funkčnost, i pro soubory
+
 
*****PR* Příklad použití
+
(V&nbsp;Linuxu se SUID u&nbsp;skriptů ignoruje od verze jádra Linux 3.x.)
*****/tmp
+
</div>
****vlastník souboru může soubor mazat
+
 
*****neplést s vlastníkem složky
+
 
****nastavení
+
== Set GID (SGID) ==
*****chmod o+t soubor.txt
+
* Pro spustitelné soubory (programy):
*****chmod o-t soubor.txt
+
** Význam analogický jako SUID &mdash; program bude spouštěn s právy skupiny, která program vlastní. (Dnes ne moc používané.)
****výpis ????????t
+
* Pro složky:
*****t
+
** Pokud ve složce vytvořím soubor či složku, pak se vlastnická skupina převezme z nastavení složky. (Vlastník budu já.)
*****T
+
** (Standardně bych vlastník byl také já, ale vlastnická skupina by byla moje primární skupina.)
*****PR* Vyzkoušejte!
+
** Pokud vytvářím složku, zdědí vytvářená složka i SGID bit.
*****mkdir tmp
+
; Nastavení
*****cd pokus
+
chmod g+s slozka
*****touch student.txt
+
; Výpis <code>ls -l</code>:
*****chmod o+t tmp
+
* Místo <tt>x</tt> v právech ''skupiny'':
*****ls -l tmp
+
**<tt>s</tt>... SGID + právo spouštět pro skupinu
*****touch moje.txt
+
**<tt>S</tt>... SGID - právo spouštět pro skupinu
*****chown student.txt student
+
<div class="Priklad">
*****ls
+
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.
*****su student
+
</div>
*****rm moje.txt
+
 
*****rm student.txt
+
 
**umask
+
== Sticky-bit ==
***nastavuje, jaká práva má mít nově vytvořený soubor
+
* Dnes obvykle používán pouze pro adresáře.
****Vlastník bude:
+
* (Původně zamýšlená složitější funkčnost, i pro soubory.)
*****ten, kdo ho vytvořil
+
* Pokud je u&nbsp;adresáře nastaven bit sticky, pak může v&nbsp;adresáři uživatel mazat ty soubory, jejichž je vlastníkem.  
****Skupina:
+
* (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).)
*****primární skupina toho, kdo soubor vytvořil
+
; Nastavení
***bity masky odečteme od základní masky
+
chmod o+t adresar
***základ
+
; Výpis <code>ls -l</code>:
****pro soubory 666
+
* Místo <tt>x</tt> v právech ''ostatních uživatelů'':
****pro adresáře 777
+
** <tt>t</tt>... „sticky“ + právo spouštět pro všechny uživatele
***standardní maska je 022
+
** <tt>T</tt>... „sticky“ bez právo <tt>x</tt> pro všechny uživatele
*****PR* Jaká práva bude mít s touto maskou nově vytvořený
+
 
*****soubor
+
<div class="Priklad">
*****adresář
+
Příklad použití:
 +
* Je nastaven na složce <tt>/tmp</tt> (do ní si aplikace odkládají dočasné soubory).
 +
</div>
 +
 
 +
== 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 <tt>umask</tt> odečteme od základní masky:
 +
** základní maska pro soubory <tt>666</tt> (reprezentuje kombinaci <tt>rw-rw-rw-</tt>)
 +
** základní maska pro adresáře <tt>777</tt> (reprezentuje kombinaci <tt>rwxrwxrwx</tt>)
 +
* 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 &rarr; Set UID]
 +
* [http://www.library.yale.edu/wsg/docs/permissions/sgid.htm Yale.edu &rarr; SGID pro sdílené složky]

Aktuální verze z 27. 2. 2024, 08:00


Obsah

Úvod


Set UID (SUID)

Nastavení SUID
chmod u+s program
Ověření SUID
$ 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)

Nastavení
chmod g+s slozka
Výpis ls -l

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

Nastavení
chmod o+t adresar
Výpis ls -l

Příklad použití:

  • Je nastaven na složce /tmp (do ní si aplikace odkládají dočasné soubory).

umask

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)
Úkol
  • Jaká práva bude mít soubor/adresář vytvoření se standardním nastavením umask?

Související stránky


Další zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje