Szerkesztő:Saras

A Unix/Linux szerverek üzemeltetése wikiből

A cikk a 2.6.26-os kernel verzióban megvalósított capability-k általános áttekintése.

Tartalomjegyzék

1 Fogalma

A capability alapú biztonság egy biztonságosan elkészített rendszer tervezésének a koncepciója. Az alap ötlete a "mindenható" root jogosultságainak particionálása kisebb jogkörökre amelyek a thread-ekhez(process-ekhez) és a futtatható állományokhoz rendelhetünk.

2 Capability-k Lista

Az alábbi felsorolás tartalmazza a Linuxon implementált capability-ket, és a megengedett műveleteket minden egyes capability-re:

  • CAP_AUDIT_CONTROL(Linux 2.6.11)
    • A kernel auditing ki, és bekapcsolása; auditing szűrési szabályok megváltoztatása; lekérdezése auditing az státusz és szűrési szabályoknak.
  • CAP_AUDIT_WRITE(Linux 2.6.11)
    • Rekordok írása a kernel ellenőrzési logjába
  • CAP_CHOWN
    • Tetszés szerint lehet változtatni egy fájl UID-jét és GID-jét
  • CAP_DAC_OVERRIDE
    • Fájlrendszer-jogok figyelmen kívül hagyása. (DAC= "discretionary access control".)
  • CAP_DAC_READ_SEARCH
    • Kereshetünk az egész fájlrendszerben.
  • CAP_FOWNER
    • Jogosultságok ellenőrzés kikerülése (ha más a fájl rendszer UID és process UID)
    • kiterjesztett fájlattribútumok beállítása tetszőleges fájlra
    • ACL-ek beállítása tetszőleges fájlra
    • sticky bit figyelmen kívül hagyása fájl törlésnél
    • O_NOATIME tetszőleges fájl műveletnél
  • CAP_FSETID
    • Nem törli a Set-UID és a Set-GID biteket amikor a fájlt módosítják
    • beállítja a Set-GID-et
  • CAP_IPC_LOCK
    • Memória Lockolás
  • CAP_IPC_OWNER
    • Engedély figyelmen kívül hagyása System V IPC objektumokon végezett műveleteknél
  • CAP_KILL
    • Jogosultságok figyelmen kívül hagyása szignál küldésnél.
  • CAP_LEASE(Linux 2.4)
    • fcntl()
  • CAP_LINUX_IMMUTABLE
    • Az FS_APPEND_FL és a FS_IMMUTABLE_FL i-node flagek beállítása.
  • CAP_MAC_ADMIN(Linux 2.6.25)
    • Felülbírálja Mandatory Access Control (MAC). Implementálva a Smack Linux Security Module (LSM)-nek.
  • CAP_MAC_OVERRIDE(Linux 2.6.25)
    • Engedélyezi MAC konfigurációt vagy státusz váltást. Implementálva a Smack LSM-nek.
  • CAP_MKNOD(Linux 2.4)
    • Speciális fájlok használata
  • CAP_NET_ADMIN
    • Hálózati műveletek engedélyezése (routing tábla módosítása, multicast engedélyezése ).
  • CAP_NET_BIND_SERVICE
    • 1024 alatti porthoz bindol
  • CAP_NET_BROADCAST
    • (Unused) Broadcast socketet csinál, és multicast figyel
  • CAP_NET_RAW
    • Használja a RAW és a PACKET socketeket.
  • CAP_SETGID
    • Tetszőlegesen beállítható a process GID és a kiegészítő GID lista
  • CAP_SETFCAP(Linux 2.6.24)
    • Fájl capability-k beállítása
  • CAP_SETPCAP
    • Ha a fájl capability-k nem támogatottak: akkor beállít vagy eltávolít bármely capability-t. A hívó megengedett capability-t állíthat bármely más processznek( ha a kernel támogatja a capabiliiket akkor ezt tiltja)
    • Ha a fájl capability-k támogatottak akkor bármely capability hozzáadható a hívó folyamathoz a hívó beállíthatja a thread's bounding set-et inheritable set-re, vagy eldobhatja a capability-ket a bounding set
  • CAP_SETUID
    • Tetszőleges process UID manipuláció
  • CAP_SYS_ADMIN
    • Az alábbi műveletekre lesz jogunk:quotactl(), mount(), umount(), swapon(), swapoff(),setdomainname()
    • elvégezhető IPC_SET és az IPC_RMID művelet bármely System V IPCobjektumon;
    • Műveletek a megbízható és a biztonsági kiterjesztett attribútumokon
    • lookup_dcookie();
    • Használja ioprio_set()-nél az OPRIO_CLASS_RT és (Linux 2.6.25) IOPRIO_CLASS_IDLE I / O ütemezés osztályokat
    • Haladja meg a /proc/sys/fs/file-max, a rendszer-szintű korlátozása száma a megnyitott fájlokat a rendszer hívásoknál
  • CAP_SYS_BOOT
    • reboot() és kexec_load() használata.
  • CAP_SYS_CHROOT
  • CAP_SYS_MODULE
    • Kernel modulok ki- és betöltése
  • CAP_SYS_NICE
    • A nice érték beállítása
  • CAP_SYS_PACCT
    • acct()
  • CAP_SYS_PTRACE
    • Nyomon követés tetszőleges eljárások segíségével
  • CAP_SYS_RAWIO
    • I/O port műveletek végrehejtása (iopl() és ioperm()); hozzáférés a /proc/kcore-hoz
  • CAP_SYS_RESOURCE
    • fenntartott hely használata ext2-n
    • octl() hívással kontrollja az ext3 journalinget;
    • felül írja a diszk kvóta limiteket
  • CAP_SYS_TIME
    • Óra beállítása
  • CAP_SYS_TTY_CONFIG
    • használja a vhangup().

3 Implementáció feltételi

A capability-k teljes megvalósítására szükség van:

  1. Minden privilegizált műveletet a kernelnek ellenőriznie kell, hogy a szál a szükséges capability-t a effektívre megállapított.
  2. A kernelnek biztosítania kell rendszer hívásokat, amelyek lehetővé teszik egy szál capability beállításainak megváltoztatását
  3. A fájl rendszernek támogatni kell a futtatható fájlokhoz rendelhető capabilitket, annak érdekében hogy a processek kihasználhassák a capability-ket ha futnak.

A 2.6.24-es kernel verzió előtt csak az első kettő teljesült, a 2.6.24-től minden meg van hogy hatékonyan használhassuk a capabilitket.

4 Capability-k a fájlrendszerben

A fájl rendszer egy bővített attribútumban tárolja a binárisokhoz rendelt capability-ket. A capability-k jelenleg (2.6.24-es kernel) ext2, ext3 és XFS fájl rendszerekben támogatottak. Három halmazuk van:

  • Permitted (megengedett):
    • A futtatás során létrejövő process megengedett halmaza kiegészül a binárisnak megengedett halmaz elemeivel
  • Inheritable (örökölhető):
    • Ez egy maszk a mi ÉS kapcsolatban van a hívó process örökölhető halmazával. Az itt "megörökölt" jogokhoz hozzáadjuk hozzáadjuk a fenti megengedett halmazt.
  • Effective (hasznos):
    • jelző bit ként funkciónál, Ha értéke 1 akkor a megengedett halmazban lévő összes capability azonnal megjelenik az hasznos készletben is. 0 esetén nem.

5 Capability-k átalakulása az execve() alatt

A execve() hívásnál a kernel kiszámolja a használandó capabilitket amiket a process használni fog az alábbi algoritmussal:

          P'(permitted) = (P(inheritable) & F(inheritable)) |(F(permitted) & cap_bset)
          P'(effective) = F(effective) ? P'(permitted) : 0
          P'(inheritable) = P(inheritable)    [nem változott]

ahol:

  • P jelöli az értéket amit egy szál capability beállított az execve() előtt
  • P'azok a capability-k amikre az execve() után volt szükség
  • F a fájl capability beállítások
  • cap_bset a capability bounding set értéke.

6 Capability-ket használó rendszerben root jogosultságú program futattása

Capability-t használóprogram rootként fusson az execve()-et használva:

  1. A set-user-ID-root program futtatásával, vagy a valós UID jét a processnek 0-ra állítjuk akkor a fájl számára örökölhető és engedélyezett lesz minden jogosultság ( minden capability engedélyezett)
  2. Ha a set-user-ID-root programmal hajtjuk végre akkora fájl effektív bitje definició szerint egy(engedélyezett).

7 Capabilityk hatása a User ID-re

Megőrzi a hagyományos szemantikát átjárhatóan a 0 és a "nem nulla " user ID-k között. A kernelen az alábbi változtatásokat eszközölték a szálak capability-ének beállításához: a szál valós, effektív, mentett állapotú:

  1. Ha egy vagy több valós, effektív vagy mentett user id volt előzőleg 0 és a UID megváltozik mindegyik hatására akkor ezek az "ID-k nem null értékűek", akkor a capability-k törölve lesznek a megengedett és az effektív capability beállításokból.
  2. Ha az effektív user ID megváltozott 0-ról "nem nullára", akkor minden capability törlődik az effektív beállításból.
  3. Ha az effektív user ID megváltozik "nem nulláról" 0-ra akkor a megengedő beállítások be másolódnak az effektív beállításokba
  4. Ha a fájlrendszer user ID-je megváltozott 0-ról nem nullára akkor a következő capability-k törölve lesznek az effektív beállításból:CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH, CAP_FOWNER, CAP_FSETID,CAP_LINUX_IMMUTABLE (Linux 2.2.30), CAP_MAC_OVERRIDE, and CAP_MKNOD(Linux 2.2.30)

Ha a fájlrendszer UID-je "nem nulláról" 0-ra változik akkor a fent felsorolt capabilitk mind engedélyezettek lesznek az effektív beállításban

8 Programból beállítható capability sets

Amikor egy threaden betöltödnek vagy megváltoznak a capability beállítások a capget()-et és a capset()-et rendszer hívást használják, ezenfelül a cap_get_proc() használata és a cap_set_proc() is benne van a libcap csomagban. A következő szabályok irányítják a változásokat a szál capability beállításokban:

  1. Ha a hívónak nincs CAP_SETPCAP capability-je, akkor az új örökölhető beállításnak rendelkeznie kell az al-beállításával a jelenlegi örökölhető és megengedett beállításoknak
  2. (kernel 2.6.25) Az új örökölhető beállítás kötlelezően részhalmaza az örökölhető beállításoknak és a bounding set-nek
  3. Az új megengedett beállítás az al-beállítása a létező megengedett beállításnak
  4. Az új effektív beállítás az al-beállítása az új megengedett beállításnak.

9 A "securebits" flagek:"Létrehozni egy csak capability-s környezetet"

2.6.26-os kerneltől és a kernelben engedélyezett fájl capability-kkel , a linux megvalósítja a pre-thread(elő-szál??) securebit flag beállításokat. Ezek az alábbiak:

  • SECBIT_KEEP_CAPS: Engedélyezi a szálnak egy vagy több 0 UID-t megörizen.Eza flag minden execve()-nél törlődik
  • SECBIT_NO_SETUID_FIXUP: A flag hatására meg áll a kernel capability beállító képessége
  • SECBIT_NOROOT: Ha bit aktív akkor a kernel nem tudja garantálni a capability-ket amikor a set-user-ID-root program fut, vagy amikor a process effektív vagy valós UID-je 0

10 Forrás

kernel.org

Személyes eszközök