1. Előszó
A Security-Enhanced Linux (SELinux) egy Linux kernel modul és a Linux biztonsági alrendszere.
A SELinuxot elsősorban az NSA fejlesztette. A Linux kernelek 2.6 és annál magasabb verziók már integrálják a SELinux modulokat.
A SELinux nagyon összetett, és sok olyan fogalmi dolgot tartalmaz, amit nehéz megtanulni. Sok Linux rendszergazdája kikapcsolta a SELinuxot, mert problémásnak találják.
Ha el tudod sajátítani a SELinuxot és helyesen használni, szerintem az egész rendszer gyakorlatilag eljut a "elpusztíthatatlan" szintre (mindig ne feledd, hogy nincs abszolút biztonság).
A SELinux alapfogalmainak és az egyszerű konfigurációs módszerek elsajátítása kötelező tanfolyam minden Linux rendszergazdálkodó számára.
Ez a cikk a CentOS 7.4.1708-on alapul.
Ez a cikk kizárólag személyes tanulási élmény megosztása és cseréje, a hibák elkerülhetetlenek, csak referenciaként! Ha hibát találsz, kérlek, jelezd, nagyon köszönöm!
2. A SELinux szerepe és az engedélykezelési mechanizmus
2.1 A SELinux szerepe
A SELinux fő feladata, hogy minimalizálja azokat az erőforrásokat, amelyeket a szolgáltatási folyamatok a rendszerben elérhetnek (a legkisebb jogosultság elve).
Képzeld el, hogy ha egy rootként futó hálózati szolgáltatásban 0day sebezhetőség van, a hackerek ezt a sebezhetőséget kihasználhatják, hogy a szerveredön root módjára azt csinálják, amit akarnak. Nem ijesztő?
A SELinux azért van itt, hogy megoldja ezt a problémát.
2.2 DAC
Egy olyan operációs rendszerben, amely nem használja a SELinuxot, az határozza meg, hogy elérhető-e egy erőforrás, az, hogy az erőforrás rendelkezik-e a megfelelő felhasználó joggalmaival (olvasás, írás, végrehajtás).
Amennyiben a hozzáférési folyamat megfelel a fent említett feltételeknek, hozzáférhet.
A legvégzetesebb probléma, hogy a root felhasználók nem állnak semmilyen szabályozás alá, és a rendszeren lévő erőforrások korlátozás nélkül elérhetők.
Ennek a jogosultságkezelő mechanizmusnak a fő teste a felhasználó, más néven autonóm hozzáférés-vezérlés (DAC).
2.3 MAC
Egy SELinuxot használó operációs rendszerben nemcsak a fent említett tényezők határozzák meg, hogy hozzáférhet-e egy erőforráshoz.
Így, még ha egy folyamat root formátumban is fut, elengedhetetlen meghatározni, hogy milyen típusú folyamat és milyen erőforrások engedélyezett elérhetők, mielőtt eldöntenénk, engedélyezik-e hozzáférést egy erőforráshoz. A folyamat aktív tere is minimálisra tömöríthető.
Még egy root alapú szolgáltatási folyamat is általában csak a szükséges erőforrásokhoz fér hozzá. Még ha egy program sebezhető is, a hatás mértéke korlátozódik az általa elérhető erőforrásokra. A biztonság jelentősen megnőtt.
Ennek a jogosultságkezelési mechanizmusnak a fő eleme a folyamat, más néven kötelező hozzáférés-ellenőrzés (MAC).
A MAC két módra oszlik: az egyik Kategória-biztonsági (MCS) mód, a másikat pedig Többszintű Biztonsági (MLS) mód.
A következő műveletek MCS módban vannak.
2.4 A DAC és a MAC összehasonlítása
Itt egy kép, amit illusztrálok.
Ahogy láthatod, DAC módban, amíg a megfelelő könyvtár rendelkezik a megfelelő felhasználó jogosultságaival, elérhető. MAC módban ez a folyamatok által elérhető könyvtárak száma is korlátozott.
3. A SELinux alapfogalmai
3.1 Alany
Ez teljesen egy folyamattal azonosítható.
Megjegyzés: A könnyebb megértés érdekében, hacsak nem másként jelölik, a folyamatot tekintjük az alábbi fő testnek.
3.2 Cél
Az alapító által elérhető források. Lehetnek fájlok, könyvtárak, portok, eszközök stb.
Megjegyzés: A könnyebb megértés érdekében, hacsak nem másként jelölik, a következő dokumentumokat vagy könyvtárakat tárgyként tekintik.
3.3 Szabályzat és szabály
Általában sok fájl és folyamat van a rendszerben, és az idő- és költségmegtakarítás érdekében általában csak bizonyos folyamatokat szelektíven szabályozunk.
És az, hogy mely folyamatokat kell szabályozni, és hogyan kell azokat irányítani, az a politika határozza meg.
Egy kötvényben több szabály is van. Egyes szabályok szükség szerint engedélyezhetők vagy kikapcsolhatók (ezelőtti Boole-szabályok).
A szabályok modulárisak és bővíthetők. Új alkalmazás telepítésekor az alkalmazás új modulok hozzáadásával is hozzáadhat szabályokat. A felhasználók manuálisan is hozzáadhatnak vagy eltávolíthatnak szabályokat.
A CentOS 7 rendszerben három szabályzat áll rendelkezésre, nevezetesen:
1. célzott: A legtöbb hálózati szolgáltatási folyamatot irányítja. Ez a rendszer alapértelmezett szabályzata (az alábbi szabályokat alkalmazzuk).
2. Minimum: Célzott adatok alapján csak kiválasztott hálózati szolgáltatási folyamatokat szabályoznak. Általában nem.
3. MLS: Többszintű biztonsági védelem. Szabályozd az összes folyamatot. Ez a legszigorúbb szabály, és a konfiguráció nagyon nehéz. Általában csak akkor használják, ha rendkívül magas biztonsági követelmények vannak.
A szabályzatok beállíthatók az /etc/selinux/config formátumban.
3.4 Biztonsági kontextus
A biztonsági kontextus a SELinux középpontjában áll.
Biztonsági kontextusként "folyamatbiztonsági kontextusra" és "dokumentumbiztonsági kontextusra" osztom be.
Egy folyamatbiztonsági kontextus általában több dokumentumbiztonsági kontextusnak felel meg.
Csak akkor férhet hozzá a két folyamat biztonsági kontextusa, ha a két eszköz biztonsági kontextusa megfelel. A levelezésüket a kötvény szabályai határozzák meg.
A fájlbiztonsági kontextust az határozza meg, hol hozták létre a fájlt, és melyik folyamat hozta létre. A rendszernek van egy alapértelmezett értékkészlete, és a felhasználók beállíthatják az alapértelmezett értékeket is.
Fontos megjegyezni, hogy a fájlok áthelyezése nem változtatja meg a fájlok biztonsági kontextusát.
A biztonsági kontextus szerkezete és jelentése
A biztonsági kontextusban négy mező van, amelyeket oszlopok választanak el. Olyan alak, mint: system_u:object_r:admin_home_t:s0.
3.5 SELinux Working Mode
A SELinux három működési móddal rendelkezik, nevezetesen:
1. végrehajtás: Kényszerített mód. A SELinux szabályainak megsértéseit blokkolják és naplózzák a naplókba.
2. Engedékeny: Tolerancia mód. A SELinux szabálysértések csak a naplókba kerülnek. Általában hibakereséshez.
3. kikapcsolva: Kapcsold ki a SELinuxot.
A SELinux munkamód beállítható, például /etc/selinux/config.
Ha le akarsz kapcsolni a letiltottról a végrehajtásra vagy engedéllyre, újra kell indítanod a rendszert. És fordítva is.
A Enforcing és Permissive módok gyorsan válthatók a Setenforce 1|0 parancsral.
Fontos megjegyezni, hogy ha a rendszer egy ideje kikapcsolva fut a SELinux kikapcsolásával, az első újraindítás a SELinux bekapcsolása után lassabb lehet. Mert a rendszernek biztonságos kontextust kell létrehoznia a lemezen lévő fájlok számára (mondtam, hogy kb. 10 percre újraindítottam, és azt hittem, halott...... )。
A SELinux naplókat az auditd.service segítségével kell rögzíteni, kérjük, ne tiltsd le.
3.6 SELinux munkafolyamat
Itt egy idézet egy képből, sok magyarázat nélkül.
Megjegyzés: A fenti biztonsági szöveg a biztonsági kontextusra utal.
4. Alapvető SELinux műveletek
4.1 Lekérdezés egy fájl vagy könyvtár biztonsági kontextusának lekérdezése
Parancs alapvető használata
ls -z
Használati példák
Kérdezd le az /etc/hostok biztonsági kontextusát.
ls -Z /etc/hosts
Végrehajtási eredmények
-rw-r-r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Lekérdezés a folyamat biztonsági kontextusára
Parancs alapvető használata
ps auxZ | GREP -V GREP | grep
Használati példák
Kérdezze le a Nginx-hez kapcsolódó folyamatok biztonsági kontextusát.
ps auxZ | GREP -V GREP | Grep Nginx
Végrehajtási eredmények
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: munkavállalói folyamat
4.3 Egy fájl vagy könyvtár biztonsági kontextusának manuális módosítása
Parancs alapvető használata
CHCON [...]
Opciófüggvény -u Módosítsa a biztonsági kontextus felhasználói mezőjét -r Módosítsa a biztonsági kontextus szerepmezőjét -t Módosítsa a biztonsági kontextus típusmezőjét -l Módosítsa a biztonsági kontextus szintmezőjét --hivatkozás Módosítsa a biztonsági kontextust a megadott fájlhoz vagy könyvtárhoz igazítva -R Rekurzív művelet -h Módosítsa a lágy link biztonsági kontextusát (módosítsa a lágy link megfelelő fájlját anélkül, hogy ezt az opciót használná)
Használati példák
Módosítsuk a teszt biztonsági kontextusát aaa_u:bbb_r:ccc_t:s0-ra.
chcon -u aaa_u -r bbb_r -t ccc_t teszt
4.4 Egy fájl vagy könyvtár biztonsági kontextusának visszaállítása az alapértelmezett értékére
Parancs alapvető használata
RestoreCon [opciók] [...]
Opciófüggvény - V nyomtatási műveleti eljárás - R rekurzív művelet
Használati példák
Miután hozzáadtál néhány webfájlt a Nginx szervered könyvtárába, állítsd be a megfelelő biztonsági kontextust ezekhez az új fájlokhoz.
restorecon -R /usr/share/nginx/html/
4.5 Lekérdezés a Boole-szabályok és azok státusza a rendszerben
Parancs alapvető használata
getsebool -a
Mivel a parancs vagy az összes szabályt, vagy csak egy szabályt kérdez, általában először az összes szabályt lekérdezi, majd a grep segítségével szűri.
Használati példák
Lekérdezés a httpd-hez kapcsolódó Boolean szabályok.
getsebool -a | grep httpd
Végrehajtási eredmények
httpd_anon_write -->
httpd_builtin_scripting -->
httpd_can_check_spam -->
httpd_can_connect_ftp -->
#以下省略
4.6 Boole-szabály váltása
Parancs alapvető használata
Setsebool [opció]
Opciós funkció -P újraindítása továbbra is érvényes
Használati példák
Kapcsold be httpd_anon_write szabályokat.
setsebool -P httpd_anon_write on
4.7 Alapértelmezett biztonsági kontextus hozzáadása egy könyvtárhoz
Parancs alapvető használata
semanage fcontext -a -t "(/.*)?"
Megjegyzés: Egy könyvtár vagy fájl alapértelmezett biztonsági kontextusa a semanage fcontext -l parancs használatával és grep szűréssel együtt tekinthető meg.
Használati példák
Miután hozzáadtál egy új oldal könyvtárat /usr/share/nginx/html2 a Nginx-hez, ugyanazt az alapértelmezett biztonsági kontextust kell beállítanod neki, mint az eredeti könyvtárban.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Olyan portok hozzáadása, amelyeket bizonyos típusú folyamatok engedélyeznek
Parancs alapvető használata
Semanage port -a -t -p
Megjegyzés: A különböző szolgáltatástípusok számára engedélyezett portszámok a semanage port -l parancs segítségével tekinthetők meg grep szűréssel.
Használati példák
Nginx esetén HTTP szolgáltatásokhoz a 10080-as portot kell használni.
Semanage port -a -t http_port_t -p TCP 10080
5. SELinux hibaelemzés és megoldás
5.1 A SELinux naplók megértése
Amikor a SELinux engedélyezett, sok szolgáltatás normális viselkedése szabálysértésnek minősül (mind a címben, mind az alábbi hibákban).
Jelenleg SELinux megsértési naplókat kell használnunk az elemzéshez és megoldáshoz.
A SELinux megsértési naplók a /var/log/audit/audit.log formátumban vannak elmentve.
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u::system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminál=cron res=siker'
...
A fájl sok tartalommal van, és rengeteg rendszeraudit naplóval kevered, aminek semmi köze a SELinux hibákhoz. A sealert segédprogramot fogjuk használni az elemzéshez (ha a prompt nem találja meg a parancsot, telepítsd a sehibakereső csomagot).
5.2 Elemzés hibák sealert-rel
Parancs alapvető használata
sealert -a /var/log/audit/audit.log
A parancs végrehajtása után a rendszernek időt kell szánnia a naplóban lévő szabálysértések elemzésére és elemzési jelentés benyújtására. |