Nadstavbové práva
Štandardné práva súborov sú v aktuálnych časoch nedostatočné z hľadiska bezpečnosti. Bolo nutné vytvoriť istú nadstavbu, ktorá by dovolila spustiť niektoré príkazy pod iným užívateľom než je aktuálne prihlásený, prípadne zabrániť niektorým nekalým prvkom alebo nevedomých chýb. Vznikli tak nadstavbové práva:
Právo Význam Označenie Číselné vyjadrenie
s setuid Príkaz sa spustí ako vlastník súboru 4
s setgid Príkaz sa spustí pod skupinou, ktorej patrí súbor 2
t sticky bit Dovolí zmazať súbor len vlastníkovi 1
Prvé nadstavbové právo je setuid. Toto právo sa pridáva niektorým príkazom, ktoré majú špecifický význam a majú sa spúšťať napríklad s právami roota. Najšpecifickejší je práve príkaz su.
[jano@srv2 ~]$ ll /bin/su
-rwsr-xr-x 1 root root 36896 Nov 24 2010 /bin/su
[jano@srv2 ~]$
Tento príkaz slúži na zmenu identity a je to skratka zo switch user. Pri zmene identity je nutné poznať heslo užívateľa, na ktorého sa mení. Overenie hesla sa vykoná jeho zakryptovaním a porovnaním šifry hesla so šifrou uloženou v súbore s heslami. Šifrované heslá sú v linuxe uložené v súbore /etc/shadow, ktorý je čitateľný iba užívateľom root. Preto sa príkaz su spúšťa práve pod právami roota, súbor shadow je pre neho čitateľný a užívateľ sa môže autentifikovať. Bežný užívateľ bez setuid práva na súbore su nemal túto možnosť a v podstate by svoju identitu nemohol meniť.
Nastaviť setuid práva môžeme príkazom chmod a to tak, že pred štandardné unixové práva vložíme číslo setuid práva.
[jano@srv2 ~]$ chmod 4755 skript.sh
[jano@srv2 ~]$ ll
total 0
-rwsr-xr-x 1 jano jano 0 Feb 14 13:14 skript.sh
[jano@srv2 ~]$
Na mieste execute je namiesto x príznak s, ktorý vyjadruje nastavený setuid bit. Týmto zabezpečíme, že skript.sh bude spúšťateľný kýmkoľvek ale spustený bude pod užívateľom jano. Takéto skripty môžu byť nebezpečné a preto je dobré takéto súbory mať čo najmenej. Rovnako sa z bezpečnostných dôvodov pripája samostatný disk pre užívateľské adresáre /home pripája s možnosťou nosuid aby systém ignoroval suid práva. Podobne je pripojený adresár /tmp, kam má právo zapisovať každý užívateľ.
Právo setgid je využívaný pri spúšťaných súboroch obdobne ako setuid, jeho vlastnosť sa však najlepšie využíva pri spoločných adresároch. Ak nastavíme setgid právo na adresár, potom každý kto má právo zapisovať do neho, pri vytvorení súboru bude súbor patriť štandardne vlastníkovi ale skupina sa zmení na skupinu, ktorej patrí daný adresár. Príklad vysvetlí najjednoduchšie:
[jano@srv2 ~]$ chmod 2770 adresar/
[jano@srv2 ~]$ ll
total 4
drwxrws— 2 jano jano 4096 Feb 14 13:34 adresar
[jano@srv2 ~]$ chgrp fero adresar
[jano@srv2 ~]$ ll
total 4
drwxrws— 2 jano fero 4096 Feb 14 13:34 adresar
[jano@srv2 ~]$ cd adresar
[jano@srv2 adresar]$ id
uid=502(jano) gid=502(jano) groups=502(jano),503(fero)
[jano@srv2 adresar]$ touch subor
[jano@srv2 adresar]$ mkdir podadresar
[jano@srv2 adresar]$ ll
total 4
drwxr-s— 2 jano fero 4096 Feb 14 13:35 podadresar
-rw-r—– 1 jano fero 0 Feb 14 13:35 subor
[jano@srv2 adresar]$
Ak by nebol nastavený setgid na adresár, vo vnútri by súbor patril užívateľovi jano a rovnakej skupine jano.
Nastaviť setgid na adresár môžete príkazom:
chmod 2770 adresar
Prvá dvojka vyjadruje setgid právo a zbytok sú štandardné unixové práva.
Posledné nadstavbové právo je sticky bit. Môžete si ho nastaviť na niektorý spoločný adresár, ale jeho najväčší prínos je na /tmp. Tu má právo zapisovať každý:
[jano@srv2 adresar]$ ll -d /tmp/
drwxrwxrwt 3 root root 4096 Feb 14 06:03 /tmp/
[jano@srv2 adresar]$
Každý užívateľ tu môže vytvárať súbory, editovať súbory, vytvárať a mazať podadresáre, ale sticky byt dovolí zmazať tieto súbory a adresáre len jeho vlastníkovi. Nebráni to však mazaniu obsahu súborov. Najlepšie vysvetlenie je využívanie tohto adresára rôznymi programami, ktoré si tu vytvárajú svoje pomocné súbory, veľmi často typu socket. Tie majú síce minimálnu veľkosť a priamo sa nezapisuje ich obsah na disk, ale využívajú sa pri komunikácii so sieťovým hardvérom. Zmazanie týchto súborov by mohlo viesť k pádu programu. Sticky bit zamedzí ich mazaniu.
Ak existuje súbor, ktorý má plné práva ale nepatrí aktuálnemu užívateľovi, tento ho môže editovať ale nemôže ho zmazať:
[jano@srv2 tmp]$ ll subor
-rwxrwxrwx 1 root root 0 Feb 14 13:42 subor
[jano@srv2 tmp]$ rm subor
rm: cannot remove `subor’: Operation not permitted
[jano@srv2 tmp]$
V ďalšej časti si popíšeme prideľovanie práv jednotlivým užívateľom, prípadne jednotlivým skupinám.