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
editovatPouží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
editovatBě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émumaillog
- logy poštovních služebcron
- logy spouštění úloh v budoucnu démony crond a atdsecure
- 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 Windowssquid/*
- logy HTTP proxy cache squid
/var/lib
- databáze různých subsystémů, SQL serverů ap.:dhcp/*
- DHCP démon - pronájmy IP adresnfs/*
- stav NFS služebrpm/*
- 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 atdcron/*
- fronty opakovaného spouštění úloh v budoucnu démonem crondlpd/*
- 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
editovatAdresář /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 |
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ářů
editovatRů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.
- 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.
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ů
editovatDruh 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
editovatsecurity/zabezpecujemelinux jak_na_Unix.html
- Secure-Programs-HOWTO
- Security-HOWTO
- Adv-Bash-Scr-HOWTO
- Unix-and-Internet-Fundamentals-HOWTO
Verze: 5.4.2003