--==Capabilityk==-- --Fogalma: /*Fent van a wiki-n*/ --Capabilities Lista: Az alábbi felsorolás tartalmazza a Linuxon implementált capabilitiket, és a megengedett műveleteket minden egyes capabilitire: 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 A 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 (since Linux 2.6.24) Fájl capabilitik beállítása CAP_SETPCAP Ha a fájl capabilityk nem támogatottak: akkor beállít vagy eltávolít bármely capabilitit. A hívó megengedett capabilitit állíthat bármely más processznek( ha a kernel támogatja a capabiliiket akkor ezt tiltja) Ha a fájl capabilitik 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 capabilitiket 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 IPC objektumon; * 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 Use acct(2). CAP_SYS_PTRACE Nyomon követés tetszőleges eljárások segíségével CAP_SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)); access /proc/kcore. 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(). --Implementációk a most és régen A capabilitik 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 a szükséges capabilitit 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 capabilitiket ha futnak. A 2.6.24-es kernel verzió előtt csak az első kettő teljesült, a2.6.24-től minden meg van hogy hatékonyan használhassuk a capabilitket --Capabilityk á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 capabilitik amikre az execve(2) után volt szükség F a fájl capability beállítások cap_bset a capability bounding set értéke. --Capabilityk és a programok rootként végre hajtása Capabilitit használóprogram ootké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). --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 capabilitiének beállításához: a szál valós, effektív mentett állapotú, és a van fájl rendszer UID: 1. Ha egy vagy több valós, effektív vagy mentett user id volt előzőleg 0 és ennek hatására a UID megváltozik mindegyik hatására akkor ezek az "ID-k nem null értékűek", amikor minden capability mentes a megengedéstől és az effektív határozza meg. 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ő capabilitik 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) 5. 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 --Programból beállítható capability sets Egy thread helyre áll és megváltozik a capability beállítások a capget()-et és a capset()-et rendszer hívást használják. Mégis a cap_get_proc () használata és a cap-set_proc() is benne van a libcap csomagban, erre a célra preferálva. 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 capabilitije 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 az részhalmaza az örökölhető é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. --A "securebits" flagek:"Létrehozni egy csak capabilitis környezetet" 2.6.26-os kernellel kezdődően és a kernellel amiben a fájl capabilitik engedélyezve vannak, a linux implementál 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(9-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 capabilitiket amikor a set-user-ID-root program fut, vagy amikor a process effektív vagy valós UID-je 0