Szerkesztő:Saras
(Új oldal, tartalma: „ = Capabilityk = ==Fogalma:== ==Capabilities Lista== Az alábbi felsorolás tartalmazza a Linuxon implementált capabilitiket, és a megengedett műveleteket minden eg…”) |
|||
1. sor: | 1. sor: | ||
− | + | =Capability= |
|
− | = Capabilityk = |
||
− | |||
− | |||
==Fogalma:== |
==Fogalma:== |
||
5. sor: | 5. sor: | ||
==Capabilities Lista== |
==Capabilities Lista== |
||
Az alábbi felsorolás tartalmazza a Linuxon implementált capabilitiket, és a megengedett műveleteket minden egyes capabilitire: |
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''' |
||
+ | **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 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 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()''. |
||
− | CAP_AUDIT_CONTROL (Linux 2.6.11) |
+ | ==Implementációk a most és régen== |
− | 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: |
A capabilitik teljes megvalósítására szükség van: |
||
+ | # Minden privilegizált műveletet a kernelnek ellenőriznie kell, hogy a szál a szükséges capabilitit a effektívre megállapított. |
||
+ | # 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 |
||
+ | # 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. |
||
− | 1. minden privilegizált műveletet a kernelnek ellenőriznie kell, hogy a szál a |
+ | ==Capabilityk átalakulása az ''execve()'' alatt== |
− | a szükséges capabilitit a effektívre megállapított. |
+ | A ''execve()'' hívásnál a kernel kiszámolja a használandó capabilitket amiket a process használni fog az alábbi algoritmussal: |
− | |||
− | 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'(permitted) = (P(inheritable) & F(inheritable)) |(F(permitted) & cap_bset) |
||
P'(effective) = F(effective) ? P'(permitted) : 0 |
P'(effective) = F(effective) ? P'(permitted) : 0 |
||
− | |||
P'(inheritable) = P(inheritable) [nem változott] |
P'(inheritable) = P(inheritable) [nem változott] |
||
− | ahol: |
+ | ahol: |
− | + | *'''''P''''' jelöli az értéket amit egy szál capability beállított az ''execve()'' előtt |
|
− | P jelöli az értéket amit egy szál capability beállított az |
+ | *'''''P''''''azok a capabilitik amikre az ''execve()'' után volt szükség |
− | execve() előtt |
+ | *'''''F''''' a fájl capability beállítások |
− | + | *'''''cap_bset''''' a capability bounding set értéke. |
|
− | 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 |
+ | ==Capabilityk és a programok rootként végre hajtása== |
− | 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) |
+ | Capabilitit használóprogram rootként fusson az ''execve()''-et használva: |
− | 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 |
+ | # 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) |
+ | # 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ú: |
||
+ | #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 capabilitik törölve lesznek a megengedett és az effektív capability beállításokból. |
||
+ | #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. |
||
+ | #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 |
||
+ | #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) |
||
+ | 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 |
+ | ==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: |
+ | 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 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 |
+ | # Ha a hívónak nincs CAP_SETPCAP capabilitije, 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 az részhalmaza az örökölhető és a bounding set-nek |
+ | # (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 |
+ | # 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. |
+ | # 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" |
+ | ==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: |
+ | 2.6.26-os kerneltől és a kernelben engedélyezett fájl capabilitikkel , 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 capabilitiket amikor a set-user-ID-root program fut, vagy amikor a process effektív vagy valós UID-je 0 |
||
− | SECBIT_KEEP_CAPS |
+ | ==Forrás== |
− | Engedélyezi a szálnak egy vagy több 0 UID-t megörizen.Eza flag minden execve(9-nél törlődik |
+ | [http://www.ernel.org/doc/man-pages/online/pages/man7/capabilities.7.html kernel.org] |
− | |||
− | 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 |
A lap 2010. december 18., 17:08-kori változata
1 Capability
1.1 Fogalma:
1.2 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
- 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 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 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().
1.3 Implementációk a most és régen
A capabilitik teljes megvalósítására szükség van:
- Minden privilegizált műveletet a kernelnek ellenőriznie kell, hogy a szál a szükséges capabilitit a effektívre megállapított.
- 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
- 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.
1.4 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() után volt szükség
- F a fájl capability beállítások
- cap_bset a capability bounding set értéke.
1.5 Capabilityk és a programok rootként végre hajtása
Capabilitit használóprogram rootként fusson az execve()-et használva:
- 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)
- Ha a set-user-ID-root programmal hajtjuk végre akkora fájl effektív bitje definició szerint egy(engedélyezett).
1.6 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ú:
- 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 capabilitik törölve lesznek a megengedett és az effektív capability beállításokból.
- 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.
- 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
- 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)
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
1.7 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:
- Ha a hívónak nincs CAP_SETPCAP capabilitije, 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
- (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
- Az új megengedett beállítás az al-beállítása a létező megengedett beállításnak
- Az új effektív beállítás az al-beállítása az új megengedett beállításnak.
1.8 A "securebits" flagek:"Létrehozni egy csak capabilitis környezetet"
2.6.26-os kerneltől és a kernelben engedélyezett fájl capabilitikkel , 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 capabilitiket amikor a set-user-ID-root program fut, vagy amikor a process effektív vagy valós UID-je 0