Linux/Adresářová struktura

Základní vlastnosti

editovat
  • V operačních systémech unixového typu je jen jedna velká stromová struktura začínající v kořenovém adresáři, Linux/Unix rozlišuje velká a malá písmena (standardně se u názvů souborů i adresářů používají malá písmena), jména souborů jsou dlouhá max. 255 znaků (ext2 fs), v názvu souboru se nesmí vyskytnout znak NUL (binární nula) a znak lomítko "/", celé jméno souboru včetně cesty je dlouhé max. 4 kB, a k oddělování adresářů a souborů používá normální lomítko "/".
  • Soubory začínající tečkou "." jsou skryté a nevidíme je pokud je extra nevyžádáme (přepínač "-a" u příkazu ls ap.)

Souborové systémy

editovat

Používá se nejčastěji zhruba 8 nativních Unixových FS (tj. může na nich být OS Linux), z toho 4 žurnálovací:

    • ext3 (Linux komunita, nástupce ext2, je s ním kompatibilní),
    • ReiserFS (výkonný, zvlášť při velkém množství malých souborů v adresářích),
    • JFS (IBM Journalling filesystem),
    • XFS (SGI žurnálovací FS).

Nežurnálovací jsou:

    • ext2 (nativní Linux FS),
    • Minix (prapůvodní FS Linuxu, dosti omezen - např. jména souborů max 14znakové ap.),
    • UMSDOS (nad DOS FAT FS, přidává dlouhé názvy souborů, vlastnictví a práva).
  • Podpora dalších cca 25 diskových FS (CD-ROM formáty ISO9660 a Macintosh HFS, FAT/VFAT/FAT32/NTFS Microsoft, HPFS (IBM OS/2) a další) a 5 síťových FS (Novel Netware přes IPX i TCP/IP, MS/IBM Lanmanager a Windows, Unixový NFS aj.)
  • Každý nativní Unixový FS musí podporovat adresáře, obyčejné soubory, tvrdé a symbolické linky, blokové a znakové speciální soubory, pojmenované roury a sockety domény Unix. Dále musí podporovat vlastníka a skupinu souboru a základní přístupové bity pro vlastníka, skupinu a ostatní. A také musí podporovat tyto časové údaje souborů: čas posledního přístupu k souboru (označován jako atime - access time), čas poslední modifikace obsahu souboru (mtime - modification time) a čas poslední změny i-nodu souboru /= čas změny atributů souboru/ (ctime - change time).

Adresáře

editovat
  • Základní adresáře OS mají pevné názvy a použití - viz FHS - Filesystem Hierarchy Standard (norma hierarchie souborového systému) pro OS Unixového typu (Unix-like).
  • Každý adresář obsahuje automaticky 2 položky: "." představuje běžný adresář, ".." představuje nadřazený adresář.
  • Rozlišujeme pojem relativní a absolutní cesty: absolutní začíná lomítkem, tj. od kořenového adresáře; relativní začíná od aktuálního adresáře.
  • Speciální adresáře - výjimečné svým obsahem a použitím. Nejznámější jsou tyto:
/etc
globální (systémová) konfigurace celého počítače (uživatelská nastavení jsou vždy v domácích adresářích jednotlivých uživatelů). Veškeré chování systému je řízeno konfiguračními soubory v tomto adresáři a jeho podadresářích. Vždy zálohovat alespoň tento adresář (komprimovaný se vejde na disketu).
/dev
obsahuje soubory zařízení. Tyto speciální soubory představují tzv. bloková a znaková speciální zařízení. Na dlouhém výpisu příkazem "ls -l" mají jako první písmeno práv "b" (block - bloková zař.) nebo "c" (character - znaková zař.) a místo velikosti se zobrazuje jedinečná dvojice čísel (v rozsahu 0-255) - tzv. hlavní a vedlejší číslo zařízení.
/proc
virtuální souborový systém, obsahuje soubory odrážející stav operačního systému. Většina souborů je jen pro čtení, některé soubory - typicky v adresáři "/proc/sys" - lze zapisovat - tak lze měnit charakteristiky a limity OS (např. max. počet otevřených souborů systému zápisem nové číselné hodnoty do "/proc/sys/fs/file-max", pro router povolit forwarding IP paketů napříč strojem zápisem jedničky do "/proc/sys/net/ipv4/ip_forward" apod.)

Pozn.: Pro systém je velice důležitý adresář "/etc" - obsahuje globální (systémová) konfigurace celého počítače (uživatelská nastavení jsou vždy v domácích adresářích jednotlivých uživatelů). Veškeré chování systému je řízeno konfiguračními soubory v tomto adresáři a jeho podadresářích. Vždy zálohovat alespoň tento adresář (komprimovaný se vejde na disketu).

Struktura adresářů v Linuxu/Unixu - hierarchie souborového systému

editovat

Během let vývoje Unixu se vytvořily určité konvence pro rozvržení adresářů a souborů v rámci FS (např. umístění globálních konfigurací do adresáře "/etc", dočasných souborů" do "/tmp" apod.). Projekt "Filesystem Hierarchy Standard" (FHS) se snaží tyto konvence uspořádat logickým způsobem a je široce užíván v Linuxových systémech. První na co asi narazil každý, kdo dosud pracoval jen s DOSem nebo Windows, je absence písmenek reprezentující jednotlivé disky. U Linuxu je pouze jedna velká stromová struktura. Veškeré další oddíly a disky (floppy, cdrom, síťové disky ...) se připojují do nějakého adresáře v této struktuře - viz příkazy mount a umount.

Popis základních adresářů

editovat

(u jednotlivých distribucí se mohou objevovat různé odchylky, tento popis je podle distribuce RedHat 6.0 a výše)

/ - kořen souborového systému, začátek stromové struktury
/bin - základní spustitelné soubory pro použití všemi uživateli
/boot - zde je umístěno jádro (kernel) systému a jeho mapa, initrd, soubory zavaděče (boot loader) GRUB
/dev - soubory v tomto adresáři reprezentují jednotlivá fyzická zařízení nebo pseudozařízení systému. Také jsou zde další speciální soubory.
/etc - globální konfigurační soubory systému
/home - domovské adresáře uživatelů
/lib - základní sdílené knihovny systému, mapování klávesnice a konzolové fonty, moduly pro jádro systému (kernel)
/lost+found - ztracené a opravené soubory po chybách FS (ext2,ext3)
/mnt - do místních podadresářů se připojují další souborová zařízení, např. do "/mnt/floppy" disketa, do "/mnt/cdrom" CD ap.
/opt - zde bývají SW aplikace, které nejsou standardní součástí distribuce
/proc - soubory nastavení a stavu systému a jednotlivých procesů - dalo by se říci, že je to mapa stavu paměti RAM
/root - domovský adresář superuživatele (root)
/sbin - systémové privilegované spustitelné soubory, používané uživatelem root
/sys - virtuální adresář (jádra 2.6.x)
/tmp - adresář pro odkládací a pomocné soubory
/usr - další stromová struktura, obsahuje velké množství informací, jako knihovny, zdrojové kódy, spustitelné soubory, konfigurační soubory a další. Nejdůležitější z nich jsou:
/usr/bin - jako v "/bin", pro systém méně důležité aplikace
/usr/X11R6 - kompletní soubory X Window systému (zkráceně X, nikdy ne X Windows!)
/usr/include - hlavičkové soubory jádra a knihoven (v jazyce C)
/usr/lib - další všeobecné a aplikační knihovny
/usr/local - bod pro instalace aplikací, obsahuje mj. podadresáře "/bin", "/etc/", "/lib/", "/sbin",
/usr/sbin - obdoba "/sbin", méně důležité
/usr/share - soubory použitelné více aplikacemi/subsystémy (man a info stránky, dokumentace k prg. balíkům a jejich programům, pozadí a spořiče obrazovky, fonty, definice národních abeced a zvyklostí, měrných jednotek a časových zón, ikony, zvuky apod.
/usr/src - zdrojové soubory jádra
/var - soubory, jejichž obsah se během chodu systému většinou mění; nejdůležitější:
/var/named - databáze DNS démona named - popisy spravovaných domén
/var/lock - "zámky" subsystémů a programů
/var/log - systémové a aplikační logy, např:
messages - log jádra a systému
maillog - logy poštovních služeb
cron - logy spouštění úloh v budoucnu démony crond a atd
secure - logy související s bezpečností systému (přihlašování, autentikace pro poštu a další služby)
httpd/*_log - logy WWW serveru (Apache)
samba/* - logy emulátoru serveru MS Windows
squid/* - logy HTTP proxy cache squid
/var/lib - databáze různých subsystémů, SQL serverů ap.:
dhcp/* - DHCP démon - pronájmy IP adres
nfs/* - stav NFS služeb
rpm/* - databáze RPM systému (RPM = RedHat Package Manager)
/var/spool - různé systémové fronty:
at/* - fronty spouštění úloh v budoucnu démonem atd
cron/* - fronty opakovaného spouštění úloh v budoucnu démonem crond
lpd/* - fronty různých tiskových služeb (lpr, LPRng, cups, ...
mail/* - nevyzvednutá pošta lokálních uživatelů počítače.
mqueue/* - fronta poštovních zpráv - e-mailů čekající na odeslání některým MTA (Mail Transport Agent - agent s teplou vodou /a poštou/)
/var/www - data WWW serverů - adresáře vlastních HTML dokumentů, ikon, CGI scriptů, manuálových stránek.

Důležité soubory a/nebo adresáře

editovat

Adresář /etc

editovat
/X11 Konfigurace X window systému, font serveru a správců přihlášení pro grafický mód
/default Adresář implicitních parametrů programů (např. "useradd" - přidání uživatele do systému
/httpd Konfigurační soubory WWW serveru Apache
/mail Adresář cfg souborů pro transport pošty
/pam.d Konfigurační soubory pro autentikaci (ověření identity) a autorizace (ověření oprávnění) k systému a jeho jednotlivým subsystémům
/ppp konfigurace démona "pppd" - spojení přes PPP protokol (např. připojení do Internetu telef. linkou
/rc.d Adresář se scripty definujícími start a ukončení systému a přechod mezi jednotlivými úrovněmi běhu (runlevels) systému
/samba Adresář s konfigurací démona emulace služeb WinNT serveru
/ssh Globální konfigurace SSH (šifrované síťové spojení) klienta a démona
/sysconfig Konfigurační soubory sítě, startovací parametry jednotlivých systémových démonů
/xinetd.d Adresář se soubory konfigurace síťových služeb spouštěných superdémonem "xinetd"
aliases Soubor přezdívek poštovního démona sendmail
bashrc Inicializační soubor shellu bash
crontab Popis opakovaného spouštění procesů pro démon "crond"
exports seznam řízení přístupu k NFS filesystému (sdílení disků v Unix systémech)
fstab Statické informace o připojovaných filesystémech (zdroj, typ, bod připojení, charakteristiky)
host.conf, resolv.conf DNS - konfigurační soubory
hosts Statické informace o jménech počítačů a jejich IP adrese
hosts.allow, hosts.deny soubory povolení/zákazu přístupu z jiných síťových zařízení k jednotlivým síťovým službám (tzv. TCP wrappers)
inittab Konfigurační soubor praotce všech procesů - démona "init"
issue Zpráva vypisovaná před přihlašovacím promptem v text módu
ld.so.conf Seznam nestandardních adresářů pro hledání sdílených knihoven
logrotate.conf Globální popis rotace logů systému a služeb
modules.conf Konfigurační soubor pro zavádění modulů jádra (parametry ovladačů, přiřazení ovladačů k síťovým rozhraním,...)
motd Message Of The Day - zpráva vypisovaná po přihlášení v text módu
mtools.conf Konfigurační soubor balíku mtools - přístup k DOS jednotkám bez jejich "montování"
named.conf Konf. soubor DNS démona "named" (Domain Name Services = služby doménových jmen)
passwd Soubor založených uživatelů
shadow Soubor uživatelských hesel a jejich vlastností
group Soubor skupin uživatelů
gshadow Soubor hesel skupin a jejich vlastností
profile Systémový inicializační soubor přihlašovacího shell bash a sh
services Standardní názvy portů jednotlivých síťových služeb
shells Úplná specifikace (jméno vč. cesty) platných přihlašovacích shellů
syslog.conf Konfigurační soubor pro logovací démon syslogd

Adresář /dev

editovat

V adresáři /dev a jeho podadresářích jsou soubory prostředků systému. Prostředkem (angl. device) se rozumí nějaké fyzické zařízení (nebo kód který zařízení emuluje) schopné provádět vstup nebo výstup (IO - Input/Output). Např. klávesnice je vstupní zařízení, hard disk je vstupní (čtení) i výstupní (zápis) zařízení. V Unixech a Linuxu je většina zařízení reprezentována jako soubory v souborovém systému. Tyto soubory jsou standardně uloženy v adresáři "/dev" a jeho podadresářích a tam jsou přístupné pro procesy které potřebují provádět IO operace.

Zařízení většinou spadají do dvou kategorií: znaková a bloková. Znaková provádí IO znak po znaku - např. klávesnice, myš, tiskárna. Bloková zařízení čtou/zapisují data ve větších kusech, tzv. blocích. Patří sem např. zařízení pro uchování dat - IDE/SCSI pevné disky, CD-ROM, floppy disky, páskové jednotky. Provádění IO interakce s blokovými zařízeními s velkými kusy dat dovoluje efektivnější přenosy velkých bloků dat.

Jména prostředků: Často podle (anglického názvu) zařízení které reprezentují: "/dev/fb" = Frame Buffer grafické zařízení, "/dev/hd" = IDE pevný disk (Hard Disk), "/dev/fd" = floppy disk, "/dev/ttyS" terminálové zařízení na sériové lince. Někdy jsou pro snazší orientaci použity symbolické linky ukazující na skutečné fyzické zařízení - např. "/dev/mouse", zařízení představující myš, může být linkováno na sériový port, USB nebo PS/2 zařízení. Podobně "/dev/cdrom" může být symbolický link např. na "/dev/hdc" (IDE master na druhém řadiči), "/dev/sda" ap.

V některých případech, např. u pevných disků je pojmenování zařízení trochu komplikovanější. Jméno zařízení je u pevného disku sestaveno z typu disku, pozice disku a diskové oblasti. Např. "/dev/hda1" je první disková oblast (1) na disku typu IDE (hd), který je zapojen jako "master" na prvním IDE řadiči systému (a). SCSI pevné disky mají označení "/dev/sd" místo "/dev/hd".

Identifikace prostředků jádrem je podle tzv. hlavního (MAJOR) a vedlejšího (MINOR) čísla (0-255) příslušného speciálního souboru v adresáři "/dev/". Hlavní číslo udává typ zařízení a vedlejší pořadové číslo zařízení, v hlavním nebo vedlejším čísle může být zamontováno také pořadové číslo řadiče a/nebo pořadí jednotky na řadiči - např.:

  • hdc s čísly (22,0) představuje master disk na druhém IDE/ATA řadiči (druhý řadič je daný hlavním číslem 22, vedlejší číslo 0 zde znamená celý disk);
  • hdb7 /číslo (3,71) - hlavní číslo 3 určuje druhý (E)IDE řadič, 71 disk a oblast na něm: 0-63 je vyhrazeno pro hlavní (master) disk (0=celý a 1-63 jsou jeho oblasti (partitions), 64-127 je pro druhý (slave) disk/: 71-64=7 => je to sedmá (logická) oblast /partition/ na slave disku prvého IDE/ATA řadiče /musí to bý logická oblast - primární v MBR mají čísla 1-4/
  • fd0H1440 je první floppy disk (první 0 za fd) formátovaný na 1.44MB=1440kB

Speciální zařízení - několik pseudozařízení, jež se mohou občas hodit: /dev/null, /dev/zero, /dev/full, a /dev/random :

/dev/null
"Nulové" zařízení, je druh "kontejneru na odpadky" ("trash") zařízení, malá černá díra - co do něj zapíšeme už nikdy nedostaneme zpět a je to bezedné. Jakýkoliv zápis do něj je úspěšný a jakékoliv čtení z něj vrátí stav "dosažen konec souboru". Velice užitečná věc pro potlačení nežádoucích výpisů na obrazovku z některých programů, zvlášť ve scriptech pomocí přesměrování standardního výstupu nebo chybového výstupu do tohoto zařízení. Nebo k vymazání obsahu souboru a přitom zachování všech jeho přístupových (vlastnictví+práva) atributů (!). Příklady:
$ modprobe ipsec 2>&1 /dev/null# potlač chybový výstup který při zavádění modulu vznikne
$ cat /dev/null > /var/log/messages# "vyprázdni" systémový log a nezměň práva souboru
/dev/zero
Je podobné /dev/null. Na vstupu se chová stejně, ale čtení z "/dev/zero" vrátí znak(y) \0 (binární nula). Proto se /dev/zero často užívá k vytvoření prázdných souborů:
dd if=/dev/zero of=~/mujfajl bs=1k count=100# vytvoř 100kB soubor v mém domácím adresáři, plný nul
/dev/full
Simuluje zaplněné zařízení. Zápis do "/dev/full" skončí chybou. Užitečné pro testování chování aplikací na zaplněném zařízení:
$ cp test-file /dev/full
cp: writing `/dev/full': Na zařízení není volné místo
/dev/stdin, /dev/stdout a /dev/stderr
Jsou zařízení standardního vstupu, výstupu a chybového výstupu. Jsou užitečné u programů, které požadují na příkazové řádce specifikaci(e) vstupního a/nebo výstupního souboru a my bychom je potřebovali zařadit spíše jako filtr, tzn. chceme, aby vstup byl ze stdin a/nebo výstup na stdout. Např. program dumb_program, vyžadující na příkazové řádce specifikaci nejprve vstupního a pak výstupního souboru můžeme zařadit jako filtr do roury takto:
$ cat '''file''' | dumb_program '''/dev/stdin /dev/stdout''' | sort
/dev/random a /dev/urandom
Jsou zařízení, která generují "náhodná" data. "/dev/random" je kvalitnější než "/dev/urandom". Generace náhodných znaků v "/dev/random" je založena na "šumu prostředí", který je nedefinovatelný. V systému jsou pouze omezené zdroje tohoto náhodného šumu, proto je zařízení "/dev/random" pomalé a může se pozastavit a vyčkat až nasbírá další data. "/dev/urandom" užívá stejné zdroje šumu jako "/dev/random", ale generuje pseudonáhodná data pokud náhodná data nejsou k dispozici. Tzn. je rychlejší, ale méně přesné.

Hlavní význam speciálních souborů v adresáři /dev je:

  • Dvojice hlavní/vedlejší číslo pro jádro jednoznačně definuje ovladač zařízení a případně řadič a jednotku na řadiči (v systému může být několik stejných řadičů (např. IDE/ATAPI, SCSI, USB) a každý řadič může obsluhovat více jednotek (na jednom SCSI řadiči může být např. současně disk, magnetická páska, CD-ROM, ZIP mechanika výměnných disků, scanner a osvitová jednotka)
  • Programy přistupují k zařízením jednotným způsobem stejně jako k souborům - čtení ze souboru /dev/st0 je vlastně čtení z magnetické pásky, zápis do souboru /dev/tty4 je výpis na čtvrtou virtuální konzoli počítače, přečtení prvních 512 Byte ze souboru /dev/hda je vlastně přečtení prvního sektoru z master disku na primárním IDE/ATA řadiči ( pro architekturu PC a DOS dělení disků je to MBR (Master Boot Record - hlavní zaváděcí záznam, obsahuje i Partition Table /tabulku rozdělení disku/)
  • Přístup k zařízením je řízen přístupovými právy k odpovídajícím speciálním souborům adresáře "/dev" - právem k zápisu do speciálního souboru v "/dev" je dáno právo zápisu za odpovídající zařízení

Pozn.1: Síťová zařízení (LAN/WAN karty, PPP/SLIP/PLIP zařízení, různá síťová "pseudozařízení" (regulátory šířky pásma/vyvažování zátěže, kryptovací zařízení, zařízení pro virtuální sítě /VPN/ ap.) nejsou mapovány na položky souborového systému - nemají položky v adresáři "/dev" jako ostatní zařízení. Je to dáno tím, že

komunikace se síťovým zařízením je zcela odlišná od komunikace užité pro práci se znakovými nebo blokovými zařízeními - namísto funkcí "čtení" a "zápis" je nutno volat funkce poplatné přenosu paketů.
"síťování" většinou není specifické pro nějaký proces, přicházející pakety a/n jejich fragmenty musí být sdruženy, identifikovány a redistribuovány před tím, než je proces dostane. Systém má na starost doručování paketů mezi programy a síťovými rozhraními (interface) a řídí provádění programů na základě jejich síťové aktivity. Také směrování (routing) paketů a identifikace adres (adres resolution) je implementována přímo v jádře.

Pro potřeby síťové komunikace mezi procesy mají systémy Unix/Linux implementován koncept tzv. "soketů (angl. sockets)

Pozn. 2: Podobně jako rozhraní SCSI (Small Computer Systems Interface - komunikační protokol mezi počítačem a periferními jednotkami; všechna SCSI zařízení "rozumí" stejnému protokolu bez ohledu na typ řadiče na nejž jsou připojena), byly v nových jádrech Linuxu implementovány další třídy zařízení: USB, Bluetooth /Modrý zub/, IEEE 1394 /FireWire/, I2O/Intelligent Input/Output/, Multimédia aj. Tyto skupiny mají shodný komunikační protokol a jeho implementace v jádře zbavuje vývojáře ovladačů příslušných zařízení programovat tuto pro celo třídu společnou vrstvu znovu.

Pozn. 3: Nevýhodou speciálních souborů zařízení v adresáři "/dev" je to, že je "velký" - typicky obsahuje až několik desítek tisíc souborů. Je to proto, že obsahuje (a je jich naprostá většina) soubory i pro zařízení, která v systému (ještě) neexistují - jaksi "do foroty", až se zařízení přidá, už bude jeho soubor zařízení existovat a nemusí se vytvářet např. povelem "mknod". Např. pro pevné disky "hd" jsou připravena zařízení hda-hdt, pro každé 32 oblastí (partition), tj. celkem 16x32=512 speciálních souborů. Pro jiná zařízení je situace obdobná. Východiskem je devFS filesystém, implementovaný v jádrech Linux 2.4 : není to již součást normálního FS, ale kód pro nová zařízení je součástí jádra. "/dev" FS je vytvářen v RAM během zaváděcí (boot) fáze systému a odpovídající speciální soubor pro nové zařízení je jádrem automaticky přidán při jeho připojení. (V době psaní tohoto dokumentu ale devFS nebyl součástí žádné velké distribuce).

Pozn. 4: Od jádra verze 2.6.x se začalo místo devFS filesystému používat systému Udev, který umožňuje zařízení dynamicky vytvářet a rušit

Adresář /proc

editovat

Je virtuální souborový systém (typ, zadávaný např. v povelu "mount", je "proc"), standardně připojovaný do bodu "/proc". Používá se k nastavování a čtení hodnot jednotlivých parametrů jádra i běžících procesů. Hodnoty a stavy jsou uchovávány v jednotlivých souborech, ale ve FS existují pro čitelnost a orientaci i adresáře. Ty základní přímo v "/proc":

/číselné hodnoty a stavy jednotlivých aktivních procesů. Název adresáře je PID (Program ID) číslo příslušného procesu.
/bus sběrnice systému (PCI, PCMCIA, USB, MCA, EISA, ..), jejich ovladače a připojená zařízení.
/ide IDE řadiče a zařízení na nich připojená. Obdobně i adresář /scsi.
/net data okolo síťové vrstvy: zařízení, routovací tabulky a protokoly, ARP cache, statistiky aj.
/sysvipc prostředky meziprocesové komunikace: zprávy, semafory a sdílená paměť
/sys nastavené hodnoty a limity systému

Adresář /sys se dělí na další podadresáře podle kategorie příslušných parametrů (dev, fs, kernel, net, vm aj.) Změnou hodnot v příslušných souborech můžeme měnit nastavení a chování systému. Např.:

$ cat /proc/sys/net/ipv4/ip_forward# Je stroj koncový nód (0) nebo router (1) ?
0
$ echo "1" > /proc/sys/net/ipv4/ip_forward# povol routing IPv4 paketů

 *) Kdo najde chybu? (kdo ne - viz konec článku)

Práva souborů a adresářů

editovat

Různé Unixové a Unixu podobné (Unix-like) OS podporují různé druhy souborových systémů ("FS" - File System). FS mohou mít trochu odlišnou množinu atributů řídících přístup a řízení přístupu může být ovlivněno volbami zadanými v době připojení ("mount") FS. Linux např. začal na FS "Minix", nyní je nejrozšířenější "Extended 2 FS" (zkráceně označovaný jako "ext2" nebo "e2fs", rychle nastupují žurnálovací FS ("Extended 3 FS" = ext3; "Reiser FS" = reiserfs a "Journaled FS" = jfs (IBM) jsou již součástí 2.4.x jader, další je možné přidat např. "XFS" ).

Většina FS na Unix-like OS podporuje minimálně tyto atributy:

  • Vlastnictví uživatelem a skupinou (tj. soubor má UID a GID). Uživatel může být členem více skupin, ale jedna je defaultní - a ta bude přidělena nově vytvářenému souboru (System V konvence, v BSD je skupina podle nadřazeného adresáře). Viz též dále SGID bit na adresáři.
    V Linuxu pouze root může změnit vlastníka souboru, ne samotný vlastník
  • Bity práv - čtení (r=read), zápis (w=write) a provádění(x=execute) - pro uživatele(vlastníka), skupinu a pro ostatní. Popis vlastností těchto a dalších bitů při jejich aplikaci na soubory a adresáře viz tabulka níže
  • "sticky" bit (angl. přilnavý, lepkavý - "lepí program do paměti) - ponechává kód programu v oper. paměti i po ukončení procesu
  • SUID a SGID bity - viz tab. níže
  • Časová razítka (timestamps, počet vteřin od 1.1.1970 0:0:0 UTC) - pro každý objekt FS jsou uloženy doby posledního přístupu a poslední modifikace. Poznamenejme, že vlastník souboru může tyto doby měnit - viz příkaz touch.

Pozn1: Kromě těchto pro Unix-like FS společných bitů mohou mít konkrétní FS další atributy, viz např. příkaz "chattr" a "lsattr" - atributy "ext2" a "ext3" souborových systémů, speciálně atributy "immutable (objekt nelze měnit) a append-only (objekt lze jen rozšiřovat) /nastavovatelné pouze uživatelem "root"/.

Pozn2: U FS které nemají tyto společné přístupové bity je přístup a/nebo vlastnictví možné emulovat volbami příkazu "mount" v době připojení FS.

Pozn3: Pro přidávání a výmaz souborů mají význam pouze přístupové bity a vlastník adresáře souboru (pokud Unix FS nepodporuje komplexnější schéma, jako např. POSIX ACL (ACL = ACcess List = přístupový seznam)). Tzn. i soubory, které nemají nastaveny nastaveny žádné přístupové bity mohou být smazány, pokud to povolí adresář v němž jsou umístěny. Stejně pokud nadřazený adresář povolí aby podřazené objekty mohly být změněny uživatelem nebo skupinou, pak jakýkoliv potomek může být nahrazen/změněn tímto uživatelem nebo skupinou.

Význam přístupových bitů

editovat
Druh bitu Obyčejný soubor Adresář
read: r (4) Obsah souboru lze číst Je možné zobrazit obsah adresáře, tj. vidět jaké soubory a adresáře obsahuje.
write: w (2) K souboru lze připisovat nebo jej měnit Možnost vytváření, smazání nebo přejmenování/přesunu souborů v adresáři
execute: x (1) Soubor lze spustit jako program Povolí procházení adresářem a přístup k souborům a adresářům pod ním. Bez tohoto bitu není možné přidávání, mazání a přejmenování souborů v adresáři. Adresář nemající nastavený x-bit v žádné ze tří skupin (vlastník, skupina, ostatní) je nepoužitelný - může do něj pouze uživatel root.

Adresář který má nastaven tento bit a nemá nastaven r bit nemůže být vypsán, tzn. uživatel musí znát jméno souboru, s nímž chce pracovat.

SUID (4000) Je-li nastaven na spustitelném souboru, pak při jeho spuštění bude efektivní UID procesu nastaveno na UID vlastníka souboru. Na nespustitelném souboru způsobí v Linuxu a Systém V systémech uzamčení souboru při jeho přístupu. Nemá vliv
SGID (2000) Je-li nastaven na spustitelném souboru, pak při jeho spuštění bude efektivní GID procesu nastaveno na GID vlastníka souboru. Na nespustitelném souboru způsobí v Linuxu a Systém V systémech uzamčení souboru při jeho přístupu. Pokud je SGID bit nastaven na adresáři, soubory v adresáři vytvořené budou mít jejich GID automaticky nastavené na GID adresáře - tzv. "projekt adresáře". Nestandardizováno, funguje v Linuxu a na Solarisu.
sticky: t (1000) Staré Unixy jej nazývaly "Save program text" bit a indikoval, že kód spustitelných souborů má zůstat v oper. paměti po ukončení úlohy. Na Linuxu nemá význam - díky správě VM jej nepotřebuje Bez ohledu na zápisové práva daného adresáře, smazání a přejmenování souboru v tomto adresáři může provést pouze vlastník souboru, vlastník adresáře nebo ten, kdo má explicitně povolena práva zápisu do souboru. Používané na veřejně zapisovatelné adresáře jako je "/tmp"

Pozn.1: r,w,x práva na adresář jsou nezávislé na právech souborů a adresářů pod ním. Např. přístup na zápis do adresáře povoluje vytváření nových souborů v adresáři nebo výmaz existujících, ale nedává automaticky právo na zápis do existujících souborů.

Pozn.2: SUID shell scripty představují vážnou bezpečnostní slabinu a mohou být crackery zneužity pro získání root přístupu do systému. Proto je jejich nastavení jádrem ignorováno a script běží vždy pod UID uživatele.

 *) Prompt "$" ukazuje, že uživatel zřejmě není "root" a tedy nemá právo zapisovat kamkoliv do "/proc" !

Reprezentace souborového systému na disku

editovat
  • Informace o souborech jsou soustředěny do seznamu i-uzlů (i-node). Při vytváření fs se na daném médiu pro i-uzly vytvoří prostor zadané velikosti. Tím je dán max. počet i-uzlů (tzn. i max. počet souborů), které se na daném médiu mohou vytvořit.
  • Soubor na souborovém systému je jednoznačně definován číslem i-uzlu (jsou číslovány od 1). I-uzel obsahuje mj. typ souboru (obyč, adresář, symlink, speciál, FIFO, ..), jeho velikost v bajtech, počet odkazů na soubor a diskovou adresu uložení dat na disku. Neobsahuje však jméno souboru - to je uloženo v adresáři.
  • Adresář je zvláštní případ souboru. Obsahuje pouze jméno souboru (příp. délku jména) a číslo i-uzlu. Prázdná položka má nulové číslo i-uzlu.
  • Superblok popisuje systém souborů - typ fs, velikost systému souborů, počet volných bloků fs, velikost seznamu i-uzlů, i-uzel kořenového adresáře apod.
  • Zaváděcí blok (volitelně)
  • Bitmapa i-uzlů
  • Bitmapa datových bloků

Odkazy a použitá literatura

editovat

security/zabezpecujemelinux jak_na_Unix.html

  • Secure-Programs-HOWTO
  • Security-HOWTO
  • Adv-Bash-Scr-HOWTO
  • Unix-and-Internet-Fundamentals-HOWTO

Verze: 5.4.2003