1. Preambula
Security-Enhanced Linux (SELinux) ir Linux kodola modulis un Linux drošības apakšsistēma.
SELinux galvenokārt izstrādāja NSA. Linux kodoli 2.6 un jaunākas versijas jau integrē SELinux moduļus.
SELinux ir ļoti sarežģīts, un tajā ir daudz konceptuālu lietu, ko ir grūti iemācīties. Daudzi Linux sistēmas administratori ir izslēguši SELinux, jo viņiem tas šķiet apgrūtinoši.
Ja jūs varat apgūt SELinux un pareizi to izmantot, es domāju, ka visa sistēma būtībā var sasniegt "neiznīcināmu" punktu (vienmēr atcerieties, ka nav absolūtas drošības).
SELinux pamatjēdzienu, kā arī vienkāršu konfigurācijas metožu apgūšana ir obligāts kurss katram Linux sistēmas administratoram.
Šis raksts ir balstīts uz CentOS 7.4.1708.
Šis raksts ir tikai personīga mācību pieredzes apmaiņa un apmaiņa, kļūdas ir neizbēgamas, tikai atsaucei! Ja atrodat kļūdu, lūdzu, norādiet uz to, liels paldies!
2) SELinux loma un atļauju pārvaldības mehānisms
2.1 SELinux loma
SELinux galvenā funkcija ir samazināt resursus, kuriem var piekļūt sistēmas pakalpojumu procesi (vismazāko privilēģiju princips).
Iedomājieties, ka, ja tīkla pakalpojumam, kas darbojas kā root, ir 0day ievainojamība, hakeri var izmantot šo ievainojamību, lai darītu visu, ko viņi vēlas jūsu serverī kā root. Vai tas nav biedējoši?
SELinux ir šeit, lai atrisinātu šo problēmu.
2.2 DAC
Operētājsistēmā, kas neizmanto SELinux, faktors, kas nosaka, vai resursam var piekļūt, ir tas, vai resursam ir atbilstošā lietotāja atļaujas (lasīt, rakstīt, izpildīt).
Kamēr process, kas piekļūst šim resursam, atbilst iepriekš minētajiem nosacījumiem, tam var piekļūt.
Visletālākā problēma ir tā, ka root lietotāji nav pakļauti nekādiem noteikumiem, un visiem sistēmas resursiem var piekļūt bez ierobežojumiem.
Šī atļauju pārvaldības mehānisma galvenā daļa ir lietotājs, kas pazīstams arī kā autonomā piekļuves kontrole (DAC).
2.3 MAC
Operētājsistēmā, kas izmanto SELinux, faktori, kas nosaka, vai resursam var piekļūt, ir ne tikai iepriekš minētie faktori, bet arī tas, vai katram procesa veidam ir piekļuve noteikta veida resursiem.
Tādā veidā, pat ja process darbojas kā sakne, ir jānosaka procesa veids un resursu veidi, kuriem ir atļauts piekļūt, pirms izlemt, vai atļaut piekļuvi resursam. Procesa aktīvo telpu var arī saspiest līdz minimumam.
Pat pakalpojuma procesam, kas darbojas kā sakne, parasti ir piekļuve tikai nepieciešamajiem resursiem. Pat ja programma ir neaizsargāta, ietekmes apjoms ir ierobežots ar resursiem, kuriem tai ir atļauts piekļūt. Drošība ir ievērojami palielināta.
Šī atļauju pārvaldības mehānisma galvenais elements ir process, kas pazīstams arī kā obligātā piekļuves kontrole (MAC).
MAC ir sadalīts divos veidos, vienu sauc par kategoriju drošības (MCS) režīmu, bet otru - par daudzlīmeņu drošības (MLS) režīmu.
Tālāk norādītās darbības ir MCS režīmā.
2.4 DAC un MAC salīdzinājums
Šeit ir attēls, lai ilustrētu.
Kā redzat, DAC režīmā, kamēr attiecīgajam direktorijam ir atbilstošā lietotāja atļaujas, tam var piekļūt. MAC režīmā to ierobežo arī direktoriju klāsts, kuriem procesiem ir atļauts piekļūt.
3. SELinux pamatjēdzieni
3.1 Priekšmets
To var pilnībā pielīdzināt procesam.
Piezīme: Lai būtu vieglāk saprast, ja vien nav norādīts citādi, process tiek uzskatīts par galveno tekstu.
3.2 Objekts
Resursi, kuriem piekļūst principāls. Tas var būt faili, direktoriji, porti, ierīces utt.
Piezīme: Lai būtu vieglāk saprast, ja vien nav norādīts citādi, par objektiem tiek uzskatīti šādi dokumenti vai katalogi.
3.3 Politika un noteikumi
Sistēmā parasti ir liels skaits failu un procesu, un, lai ietaupītu laiku un pieskaitāmās izmaksas, mēs parasti selektīvi regulējam tikai noteiktus procesus.
Un kādi procesi ir jāregulē un kā tos kontrolēt, nosaka politika.
Politikā ir vairāki noteikumi. Dažas kārtulas var iespējot vai atspējot pēc vajadzības (turpmāk tekstā - Būla kārtulas).
Noteikumi ir modulāri un paplašināmi. Instalējot jaunu lietojumprogrammu, lietojumprogramma var pievienot kārtulas, pievienojot jaunus moduļus. Lietotāji var arī manuāli pievienot vai atņemt kārtulas.
CentOS 7 sistēmā ir trīs politiku kopas, proti:
1. mērķtiecīgs: kontrolē lielāko daļu tīkla pakalpojumu procesu. Šī ir politika, ko sistēma izmanto pēc noklusējuma (tiek izmantoti visi tālāk norādītie).
2. Minimums: Pamatojoties uz mērķtiecīgiem, tiek regulēti tikai izvēlētie tīkla pakalpojumu procesi. Parasti nē.
3. MLS: daudzlīmeņu drošības aizsardzība. Regulējiet visus procesus. Šī ir visstingrākā politika, un konfigurācija ir ļoti sarežģīta. Parasti to neizmanto, ja vien nav ārkārtīgi augstas drošības prasības.
Politikas var iestatīt /etc/selinux/config.
3.4 Drošības konteksts
Drošības konteksts ir SELinux pamatā.
Drošības konteksts Es to sadalu "procesa drošības kontekstā" un "dokumentu drošības kontekstā".
Procesa drošības konteksts parasti atbilst vairākiem dokumentu drošības kontekstiem.
Tikai tad, ja abu drošības konteksts atbilst, process var piekļūt failam. Viņu korespondenci nosaka politikas noteikumi.
Faila drošības kontekstu nosaka faila izveides vieta un process, kas to izveidoja. Un sistēmai ir noklusējuma vērtību kopa, un lietotāji var iestatīt arī noklusējuma vērtības.
Ir svarīgi ņemt vērā, ka failu pārvietošana nemaina failu drošības kontekstu.
Drošības konteksta struktūra un nozīme
Drošības kontekstam ir četri lauki, kas atdalīti ar koliem. Forma, piemēram: system_u:object_r:admin_home_t:s0.
3.5 SELinux darba režīms
SELinux ir trīs darbības režīmi, proti:
1. Izpilde: piespiedu režīms. SELinux noteikumu pārkāpumi tiks bloķēti un reģistrēti žurnālos.
2. Pieļaujams: pielaides režīms. SELinux noteikumu pārkāpumi tiek reģistrēti tikai žurnālos. Parasti atkļūdošanai.
3. atspējots: izslēdziet SELinux.
SELinux darba režīmu var iestatīt /etc/selinux/config.
Ja vēlaties pārslēgties no atspējota uz izpildes vai pieļaujamo, jums būs jārestartē sistēma. Un otrādi.
Izpildes un pieļaujamos režīmus var ātri pārslēgt, izmantojot komandu Setenforce 1|0.
Ir svarīgi atzīmēt, ka, ja sistēma kādu laiku darbojas ar izslēgtu SELinux, pirmā restartēšana pēc SELinux ieslēgšanas var būt lēnāka. Tā kā sistēmai ir jāizveido drošs konteksts diska failiem (es teicu, ka restartēju apmēram 10 minūtes un domāju, ka tas ir miris...... )。
SELinux žurnāli ir jāreģistrē ar auditd.service palīdzību, lūdzu, neatspējojiet to.
3.6 SELinux darbplūsma
Šeit ir citāts no attēla, bez lieliem paskaidrojumiem.
Piezīme: Iepriekš minētais drošības teksts attiecas uz drošības kontekstu.
4. SELinux pamatdarbības
4.1 Faila vai direktorija drošības konteksta vaicāšana
Komandu pamata lietošana
ls -Z
Lietošanas piemēri
Vaicājiet /etc/hosts drošības kontekstu.
ls -Z /etc/hosts
Izpildes rezultāti
-rw-r--r--. saknes saknes system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Vaicājiet procesa drošības kontekstu
Komandu pamata lietošana
ps auxZ | grep -v grep | Greps
Lietošanas piemēri
Vaicājiet ar Nginx saistīto procesu drošības kontekstu.
ps auxZ | grep -v grep | Greps Nginx
Izpildes rezultāti
system_u:system_r:httpd_t:s0 sakne 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: darba process
4.3 Manuāli modificēt faila vai direktorija drošības kontekstu
Komandu pamata lietošana
CHCON [...]
Opcijas funkcija -u Modificēt drošības konteksta lietotāja lauku -r Modificēt drošības konteksta lomas lauku -t Modificēt drošības konteksta tipa lauku -l Modificēt drošības konteksta līmeņa lauku --reference Modificēt drošības kontekstu atbilstoši norādītajam failam vai direktorijai -R Rekursīvā operācija -h Modificēt mīkstās saites drošības kontekstu (modificēt atbilstošo mīkstās saites failu bez šīs opcijas)
Lietošanas piemēri
Modificējiet testa drošības kontekstu uz aaa_u:bbb_r:ccc_t:s0.
CHCON -u aaa_u -r bbb_r -t ccc_t tests
4.4 Faila vai direktorija drošības konteksta noklusējuma vērtības atjaunošana
Komandu pamata lietošana
RestoreCon [opcijas] [...]
Opcijas funkcija - V Drukas darbības procedūra - R Rekursīvā darbība
Lietošanas piemēri
Pēc dažu tīmekļa failu pievienošanas Nginx servera direktorijai iestatiet pareizo drošības kontekstu šiem jaunajiem failiem.
restorecon -R /usr/share/nginx/html/
4.5 Vaicājiet Būla noteikumus un to statusu sistēmā
Komandu pamata lietošana
getsebool -a
Tā kā komanda vaicā vai nu visus noteikumus, vai tikai vienu kārtulu, tā parasti vispirms vaicā visas kārtulas un pēc tam filtrē ar grep.
Lietošanas piemēri
Vaicājuma Būla kārtulas, kas saistītas ar httpd.
getsebool -a | grep httpd
Izpildes rezultāti
httpd_anon_write --> izslēgts
httpd_builtin_scripting --> uz
httpd_can_check_spam --> izslēgts
httpd_can_connect_ftp --> izslēgts
#以下省略
4.6 Būla noteikuma pārslēgšana
Komandu pamata lietošana
setsebool [opcija]
Opcijas funkcija -P restartēšana joprojām stājas spēkā
Lietošanas piemēri
Ieslēdziet httpd_anon_write kārtulas.
setsebool -P httpd_anon_write uz
4.7 Direktorija noklusējuma drošības konteksta pievienošana
Komandu pamata lietošana
semanage fcontext -a -t "(/.*)?"
Piezīme: Direktorija vai faila noklusējuma drošības kontekstu var apskatīt, izmantojot komandu semanage fcontext -l kopā ar grep filtrēšanu.
Lietošanas piemēri
Pēc jauna vietnes direktorija /usr/share/nginx/html2 pievienošanas Nginx tam ir jāiestata tāds pats noklusējuma drošības konteksts kā sākotnējam direktorijam.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Pievienojiet portus, kurus atļauj noteikta veida procesi
Komandu pamata lietošana
semanage ports -a -t -p
Piezīme: Dažādiem pakalpojumu veidiem atļautos portu numurus var apskatīt, izmantojot komandu semanage port -l ar grep filtrēšanu.
Lietošanas piemēri
Nginx HTTP pakalpojumiem jāizmanto ports 10080.
semanage ports -a -t http_port_t -p tcp 10080
5. SELinux kļūdu analīze un risināšana
5.1 Izpratne par SELinux žurnāliem
Ja SELinux ir iespējots, dažu pakalpojumu normāla uzvedība tiek uzskatīta par pārkāpumu (gan nosaukumā, gan zemāk esošajās kļūdās).
Šobrīd mums ir jāizmanto SELinux pārkāpumu žurnāli, lai tos analizētu un atrisinātu.
SELinux pārkāpumu žurnāli tiek saglabāti /var/log/audit/audit.log.
/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=(nav) 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 piešķīrēji=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? termināls=cron res=panākumi'
...
Fails ir daudz satura, un tas ir sajaukts ar daudziem sistēmas audita žurnāliem, kuriem nav nekāda sakara ar SELinux kļūdām. Mēs izmantosim utilītu sealert, lai palīdzētu veikt analīzi (ja uzvedne nevar atrast komandu, instalējiet setroubleshoot pakotni).
5.2 Analizējiet kļūdas, izmantojot sealert
Komandu pamata lietošana
sealert -a /var/log/audit/audit.log
Pēc komandas izpildes sistēmai ir nepieciešams laiks, lai analizētu pārkāpumus žurnālos un sniegtu analīzes ziņojumu. |