Alapok
Alapok
  Történeti áttekintés, alapfogalmak
    Eredet: UNIX-like operációs rendszer
      '84: Richard Stallman: GNU project
      '85: Free Software Foundation
      '85: General Public License (GPL - „copyleft”)
      '87: Andrew S. Tannenbaum – MINIX (üzleti, oktatási)
      '91: Linus Torvalds – (GNU/?)Linux („GPL MINIX”)
      '92: Tannenbaum – Torvalds vita
        Nem UNIX-származék
        Nem POSIX-konform
        Monolitikus kernelt használ
      2000 óta: egyre elterjedtebb
        beágyazott rendszerek
        desktop
        szerverek
      http://en.wikipedia.org/wiki/Linux
    Alapfogalmak
      Linux Kernel
        "Rendszermag"
        Hardver absztrakciós réteg
        http://www.kernel.org
      Linux op. rendszer
        Linux Kernelre épülő alkalmazások összessége
        Az alkalmazások kezdetben: főként GNU szoftverek
          GCC (GNU C fordító)
          GLIBC (GNU C függvénykönyvtárak)
          GNU Core Utils (alap parancsok)
        Napjainkban: GNU alapok, plusz hobbi és üzlet
          Mozilla alapítvány termékek
          Firefox, Thunderbird, stb...
          Sun Microsystems
          Java, Netbeans, VirtualBox, stb...
          Openoffice.org
          X.org
          stb...
      Linux disztribúció
        Ad-hoc definíció: „Alkalmazások többé-kevésbé integrált gyűjteménye, Linux kernel alapon”
        Különböző „szerkesztők”
          Üzleti: Fedora (Red Hat), openSUSE (Novell), Ubuntu (Canonical), Mandriva, stb...
          Közösségi: Debian, Gentoo, Slackware, stb...
        Különböző célokra
          szerver, desktop, beágyazott, hálózati eszköz, bootolható DVD, biztonsági eszköztár, oktatóanyag, stb...
        Különböző minőségben...
        Az alábbiak többé-kevésbé (vagy egyáltalán nem) érvényesek minden disztribúcióra:
          Előre fordított és konfigurált kernel és alkalmazások
          Rendszeres biztonsági és egyéb frissítések, update
          Csomag- és függőségkezelés (.deb, .rpm, .tar.gz)
          Szoftver adatbázis
          Beépített (grafikus) konfigurációs eszközök
          Integrált telepítő és együttműködő alkalmazások
          Támogatás szoftver és tanácsadási szempontból is
          LSB kompatibilitás
          Saját téma, „branding”
          Különböző felhasználási célra minta-konfigurációk
          Tudásbázis, fórumok, aktív közösség
        http://en.wikipedia.org/wiki/Linux_distribution
    Linux Standard Base (LSB)
      Alap
        ISO POSIX (legutóbbi „stabil” változat)
      Célok
        Bináris kompatibilitás a disztribúciók közt
        Fejlesztők munkájának összehangolása
      Eszközök
        Hivatalos „LSB kompatibilis” tanúsítvány
        Automatizált teszt eszközök
        Visszafele kompatibilitás (3 fő verzió, de min. 6 év)
      Verziók
        2001: 1.0, 2004: 2.0, 2005: 3.0
        2008: 3.2 (ISO/IEC 23360 DRAFT)
      Terület
        (POSIX-szerű és/vagy bővebb)
        Standard függvénykönyvtárak, API-k
        Parancsok és alkalmazások
        Fájlrendszer szerkezete
        Futási szintek (runlevel)
        Nyomtató alrendszer, spooler, filter
        Grafikus alkalmazási felületek (X Window System)
        Csomagkezelés
      Modulok
        Core (generic, architectural)
        C++ (generic, architectural)
        Desktop (generic, architectural)
        Interpreted Languages (generic)
        Printing (generic)
        … plusz trial modulok és egyéb bővítmények
      Generic Core
        I. Introduction of Elements (scope, stb...)
        II. Executable and Linking Format (ELF)
        III. Base Libraries
          Alapvető programozási és működési környezet
          Főbb tulajdonságok felhasználói szemszögből
            kis/NAGY betű érzékenység
            3x3+3 jogosultság rendszer
            32(64)bites egészként tárolt rendszeridő
            speciális eszközleíró fájlok (blokkos, karakteres)
            processzkezelés Process ID (PID) alapon
            hálózati (és helyi) kommunikáció Socket alapon
            reguláris kifejezések támogatása
            fájlnév kiterjesztések (globbing) támogatása
            környezeti változók, futáskörnyezet (environment)
            stb...
        IV. Utility Libraries
        V. Commands and Utilities
          kb. 140 szabványosított parancs (alkalmazás)
          Processzkezelés, időzítés
            at, crontab, kill, killall, ps, renice, time, wait
          Szövegmanipuláció
            awk, ed, cat, sort, split, ed, egrep, head, tail, sed, tr
          Fájlrendszer
            chmod, chown, cp, dd, df, du, file, find, gzip, ln, rm, ls
          Rendszer
            date, dmesg, env, fuser, useradd, groupadd, groups, hostname, man, su, mount, sendmail
          Scripting, programozás
            [, test, echo, expr, false, true, make, strip, pwd, xargs
        VI. Execution Environment
          File System Hierarchy Standard (FHS)
            külön szabvány: http://www.pathname.com/fhs/
              / - gyökér fájlrendszer – általában nem osztható
              /bin – alapvető parancsok mindenki számára
              /boot – boot loader kellékek
              /dev – speciális és eszközfájlok
              /etc – rendszerkonfiguráció
                exports – NFS exportált kötetek
                fstab – statikus fájlrendszer információk
                group – rendszer csoportok
                hosts – hosztnév és -cím információk
                hosts.allow, hosts.deny – TCP korlátozások
                inittab – az init program konfigurációja
                mtab – dinamikus fájlrendszer információk
                passwd – rendszer felhasználók
                profile – alapértelmezett rendszerprofilok
                resolv.conf – névfeloldás konfigurációja
                services – szolgáltatások jegyzéke
              /home – felhasználók munkakönyvtárai (opc.)
              /lib – alapvető függvénykönyvtárak, modulok
              /media – cserélhető adattárolók csatolási pontja
              /mnt – állandó adattárolók csatolási pontja
              /opt – önálló bővítőcsomagok
              /root – adminisztrátor munkakönyvtára (opc.)
              /sbin – rendszer parancsok
              /srv – rendszerszolgáltatások adatai (pl. webroot)
              /tmp – átmeneti állományok
              /usr – alkalmazási terület – általában osztható
                /usr/X11 – grafikus környezet (opc.)
                /usr/bin – általános felhasználói parancsok
                /usr/include – C függvénykönyvtárak header fájljai
                /usr/lib – általános függvénykönyvtárak
                /usr/sbin – általános rendszerparancsok
                /usr/share – architektúrafüggetlen adatok
                /usr/share/man – kézikönyv oldalak
                /usr/src – forráskódok
              /var – változó adatfájlok – részben osztható
                /var/account – process accounting naplók (opc.)
                /var/cache – applikációk gyorsítótára
                /var/crash – összeomlási naplók (opc.)
                /var/lib – változó állapotinformációk
                /var/lock – zárolási állományok
                /var/log – naplófájlok
                /var/mail – felhasználói postafiókok (opc.)
                /var/run – futásidejű változó adatok
                /var/spool – várakozási sorok
                /var/tmp – rebootok közt megőrzött átmeneti fájlok
            az LSB-ben csak a kivételek vannak
              egyes szimbolikus linkek nem kötelezőek
              /dev bővebb lehet, major, minor nem annyira szigorú
              /etc tartalma bővebb: cron.d, cron.*, init.d, profile.d
              több fenntartott név: http://www.lanana.org/
              user accounting fájlok nem kötelezőek
              rendszerparancsok helye: /sbin, /usr/sbin, /usr/local/sbin
          Additional Recommendations (biztonság)
          Additional Behaviors (POSIX konformancia mód)
          Localization
            locale támogatás (collation, dátumforma, multibyte, ...)
        VII. System Initialization
          cron – ütemezett futtatások
            /etc/cron* fájlok és könyvtárak
          init scriptek – rendszerszolgáltatások
            általában az /etc/init.d könyvtár fájljai (opc)
            szabványos argumentumok: start, stop, restart, stb...
            szabványos visszatérési értékek: 0-OK, 1-nem fut, …
            szabványos függőségi információk
          Futási szintek (Run Levels)
            0 – halt
            1 – single user mode
            2 – multi user mode (no network services)
            3 – normal, full multiuser
            4 – reserved (default: 3)
            5 – normal, multiuser with display manager (grafikus)
            6 – reboot
          Minden init script indítása és leállítása futási szintekhez rendelve (/etc/rcX.d könyvtárak)
          A futási szintek felelőse az init processz
            a rendszer első szintű processze, PID:0
        VIII. Users and Groups
          Minden felhasználóhoz tartozik
            1 darab UID (user ID)
            1 darab elsődleges GID (primary group ID)
            tetszőleges számú járulékos GID
          Speciális felhasználók (név/csoport)
            root/root (UID:0, GID:0) – rendszergazda
            nobody/nogroup (UID:65534, GID:65534) – senki
            LSB ajánlás szerint továbbá:
              adm/adm – adminisztrátor
              lp/lp – nyomtató alrendszer
              man/man – kézikönyvek kezelése
              halt/halt – rendszer leállítás, stb...
          UID, GID 0-99 – rendszer célra fenntartva
        IX. Package Format and Installation
          Az LSB ellenzők egyik fő támadási területe
          LSB: Korlátozott RPM csomagformátum
            A nem RPM alapú disztribúciók valószínűleg nem fognak átállni
            Debian: alien program a csomagkonvertáláshoz
          Szabványos tartalom
            név, rövid leírás, verziószám, ellenőrzőkódok, aláírás
            becsomagolt állományok („payload”)
            telepítést elősegítő szabványos felületű scriptek
            függőségkezelés
            névtér-kezelés
      http://en.wikipedia.org/wiki/Linux_Standard_Base
      http://refspecs.freestandards.org/lsb.shtml
    Linux boot folyamat
      számítógép bekapcsolása, BIOS, POST
      boot loader indulása, esetleg menü (GRUB, LILO)
      kernel image betöltése
      initial ram disk image (initrd) betöltése (opcionális)
      kernel indítása, beépített driverek inicializálása
      initrd indítása, initrd driverek, egyéb inicializáció (opc)
      root (/) fájlrendszer felcsatolása
      init processz indítása (konfigurációja: /etc/inittab)
      a beállított runlevel elérése (alprocesszek indítása)
      login prompt (karakteres, vagy grafikus)
      shell vagy grafikus környezet indítása
      http://www.ibm.com/developerworks/library/l-linuxboot/index.html
    Speciális Fájlrendszerek
      /dev
        eszközvezérlők elérésére szolgál
          közvetlen fájl IO
          IOCTL hívások
        eszköztípusok
          blokk-speciális
            random seek
            buffered IO
            /dev/hda
/dev/cdrom0
/dev/tape
/dev/kmem
          karakter-speciális
            stream
            unbuffered IO
            /dev/console
/dev/ttyS0
          pszeudo
            speciális célokra
            /dev/null
/dev/full
/dev/zero
/dev/random
/dev/loop
        device node címzés
          major number - device driver ID
          minor number - device ID
          névtér kezelés konvenciók alapján
        megvalósítások
          statikus
            mknod /dev/ttyS0 c 4 64
            MAKEDEV hd
            probléma: lassan elfogytak a major-minor számok, szemetes névtér
          pszeudo
            udev
              Linux 2.6 hotplug alrendszer része
              user space daemon
              eseményvezérelt működés
              konfiguráció: /etc/udev/rules.d
              http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
            devfs (obsolete! - http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs)
        http://en.wikipedia.org/wiki/Device_node
      /proc
        "Processes as Files"
        /proc/PID könyvtárak
          /proc/PID/cmdline, which contains the command which originally started the process.
          /proc/PID/cwd, a symlink to the cwd
          /proc/PID/exe, a symlink to the original exe
          /proc/PID/fd, a directory containing a symbolic link for each open file descriptor.
          /proc/PID/root, a symlink to the root path as seen by the process
          /proc/PID/status, a file containing run state and memory usage.
          /proc/PID/task, a directory containing hard links to any child tasks
          /proc/PID/maps, the memory map
        rendszerszintű információk
          /proc/cmdline, giving the boot options passed to the kernel
          /proc/cpuinfo, CPU information
          /proc/diskstats, disk statistics
          /proc/interrupts, /proc/iomem, /proc/ioports and the directory /proc/irq
          /proc/meminfo, containing a summary of how the kernel is managing its memory.
          /proc/net, a directory about the network stack
          /proc/partitions, a list of existing partitions
          /proc/scsi, giving information about any devices connected via a SCSI or RAID controller
          /proc/self, symbolic link
          /proc/swaps, a list of the active swap partitions, their various sizes and priorities
          /proc/sys, directory, access to dynamically-configurable kernel options
          /proc/uptime, the length of time the kernel has been running since boot and spent in idle mode (both in seconds)
          /proc/version, information on the current Linux kernel
        egyéb információk, részben a /sys-be költöztek
        hasznos parancsok
          ps aux
          top
        http://en.wikipedia.org/wiki/Procfs
      /sys
        Linux 2.6 óta
          driver-device kapcsolatok leírására
          hotplug támogatás
          /proc megtisztítása a nem processz jellegű információktól
        felépítés
          /sys/devices, eszközök kapcsolatai
          /sys/bus, eszközök és buszok kapcsolatai
          /sys/class, eszközök típusok szerint
          stb...
        http://en.wikipedia.org/wiki/Sysfs
  Alapvető shell használat, általános parancsok
    Ütemezett futtatás
      Cron
        min hour day month weekday [username] command
        pl.: */5 0 * 1 1 root cat /etc/passwd
          jelentése: 5 percenként; 0 órakor; minden nap; januárban; hétfőn; a root felhasználó; futtassa a cat /etc/passwd-t
      crontab
        a felhasználó saját ütemező állománya:
        Formátuma ugyanaz, mint a rendszerszintűé, - felhasználónév nélkül
        Fájl érvényesítése: crontab fájl
        Aktuális crontab listázása: crontab -l
        Crontab törlése: crontab -r
    Rendszeridő
      Rendszeridő lekérdezése és beállítása: date
        paraméterek nélkül: aktuális idő
        idő beállítása: -s idő
        adott időpont megjelenítése: -d idő
        formátum változtatása: date paraméterek +formátum
        a date nagy biztonsággal megérti az angol nyelvi formátumú időmegadásokat (pl.: „now +2 days”)
        lásd még: man date
      Fizikai óra programozása (ritka): hwclock
      Internetes idő szolgáltatások: ntp, chrony, rdate
      hwclock
date
date -d "now +1 month" +%A
sntp -v -P no -r mica.evosoft.com
    Adatmentés
      rsync
        http://www.samba.org/rsync/
      tar
        http://en.wikipedia.org/wiki/Tar_(file_format)
      dd
        http://en.wikipedia.org/wiki/Dd_(Unix)
    Alapvető Shell használat
      A Linux nem grafikus operációs rendszer
        (DE létezik hozzá több grafikus környezet)
      Shell – karakteres parancskörnyezet
        a rendszer konfigurációjának alapvető felülete
      általános shell: BASH (Bourne Again SHell)
        beépített parancsok (cd, pwd, kill)
        külső parancsok elérhetők (PATH környezeti változó)
        history támogatás (fel-le gombok, ctrl-r)
        „job” (shell alprocessz) kezelés (bg, fg, jobs, ctrl-z, &)
        beépített help parancs
        konfigurációja: [.]bashrc és/vagy [.]bash_profile fájlok
      alias támogatás
  Jogosultságkezelés
    3x3(+3) rendszer (alapvető, általános)
      3 további jelzőbit: Setuid, Setgid, sTicky (betűk: STst)
      3 halmaz: User, Group, Others (betűk: ugoa)
      3 jog: Read, Write, eXecute (betűk: rwxX)
      minden fájlhoz tartozik: owner (UID) és group (GID)
      ls és stat parancsokkal kérdezhetők le
      chmod és chown parancsokkal manipulálhatók
      http://tldp.org/LDP/intro-linux/html/sect_03_04.html
    ls -l
      -rw-r--r-- 1 root adm 6 2009-02-12 20:54 mailrc
        első karakter: fájltípus (-,d,l,c,b,p,s,?, stb...)
        következők: 3x3 jogosultság (user, group, others)
          további információk: linkek száma, tulaj, csoport, blokkszám, módosítás dátuma, fájlnév (linkleírás)
          első karakter: fájltípus (-,d,l,c,b,p,s,?, stb...)
          következők: 3x3 jogosultság (user, group, others)
          r: read (1,4,7) – olvasás (d: könyvtárlista olvasása)
          w: write (2,5,8) – írás (d: fájlbejegyzés létrehozás, módosítás, törlés)
          x: execute/search (3,6) – futtatás (d: könyvtárváltás)
          S: setuid (3) vagy setgid (6) – tulajdonos vagy csoport öröklése (d: futtatás vagy fájlbejegyzés létrehozása esetén)
          T: sticky/restricted (9) – nem használt (d: csak a tulajdonos törölheti vagy nevezheti át a könyvtárbejegyzéseket)
          s: S+x, t: T+x
        további információk: linkek száma, tulaj, csoport, blokkszám, módosítás dátuma, fájlnév (linkleírás)
    chmod
      A 3x3+3 jogosultság megadása többféleképp
        szimbolikus: [ugoa...][+-=][rwxXst...],...
        ugoa: 'U'ser, 'G'roup, 'O'thers, 'A'll(=ugo)
        '+': hozzáad, '-': elvesz, '=': beállít
        rwxXst: 'R'ead, 'W'rite, e'X'ecute (X: dir only), 'S'etUID/GID, s'T'icky/restricted
        [ugo...][+-=][ugo...],... - jogosultság másolása
      oktális (nyolcas szrendsz.): 0SUGO
        'S'peciális: 1: sticky, 2: setGID, 4: setUID
        'U', 'G', 'O': 1: execute, 2: write, 4: read
        például: u=rw,g=wx,o=rt → 01634
    umask
      Alapértelmezett létrehozási jogosultságok
      a chmod jogosultságaihoz hasonló
      bitenkénti ÉS kapcsolattal működik
        00022 → u=rwx,g=rx,o=rx
      umask parancs
        paraméter nélkül az aktuális érték
        paraméter megadása: érték megváltoztatása
        -S kapcsoló: szimbolikus üzemmód
      az 'x' maszk (jog) alapértelmezésben csak könyvtárra érvényesül
      az umask nem korlátoz, csak alapértelmezés!
    A Linux jogosultságkezelés bővítései:
      POSIX ACL-ek (getfacl, setfacl parancsok)
        http://www.suse.de/~agruen/acl/linux-acls/online/
      Kiterjesztett attribútumok (lsattr, chattr parancsok)
        http://en.wikipedia.org/wiki/Lsattr
      Linux Capabilities (2.2 kernel óta)
        http://www.securityfocus.com/infocus/1400
        http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2.txt
      Kernel bővítmények (Grsecurity RSBAC, SELinux)
        http://www.grsecurity.net/
        http://en.wikipedia.org/wiki/Selinux
        http://en.wikipedia.org/wiki/AppArmor