Szerkesztő:Saras

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(Ú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…”)
 
(Implementáció feltételi)
 
(egy szerkesztő 9 közbeeső változata nincs mutatva)
1. sor: 1. sor:
  +
A cikk a 2.6.26-os kernel verzióban megvalósított capability-k általános áttekintése.
  +
==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.
   
= Capabilityk =
+
==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()''.
   
  +
==Implementáció feltételi==
  +
A capability-k 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 capability-t 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 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.
   
  +
==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.
   
==Fogalma:==
+
==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:
==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'(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 capability-k 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
+
==Capability-ket használó rendszerben root jogosultságú program futattá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)
+
Capability-t 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 capability-é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 capability-k 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ő 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
   
--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 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 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 capability-s 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 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
   
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.kernel.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 jelenlegi, 2011. január 19., 18:50-kori változata

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

Tartalomjegyzék

[szerkesztés] 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.

[szerkesztés] 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().

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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).

[szerkesztés] 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

[szerkesztés] 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.

[szerkesztés] 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

[szerkesztés] 10 Forrás

kernel.org

Személyes eszközök