1. Præambel
Security-Enhanced Linux (SELinux) er et Linux-kernemodul og et sikkerhedssubsystem i Linux.
SELinux blev primært udviklet af NSA. Linux-kerner 2.6 og derover integrerer allerede SELinux-moduler.
SELinux er meget komplekst og har en masse konceptuel ting, som er svære at lære. Mange Linux-systemadministratorer har slået SELinux fra, fordi de finder det besværligt.
Hvis du kan mestre SELinux og bruge det korrekt, tror jeg, at hele systemet grundlæggende kan nå det punkt, hvor det er "uforgængeligt" (husk altid, at der ikke er nogen absolut sikkerhed).
At mestre de grundlæggende koncepter i SELinux samt simple konfigurationsmetoder er et obligatorisk kursus for enhver Linux-systemadministrator.
Denne artikel er baseret på CentOS 7.4.1708.
Denne artikel er udelukkende en personlig læringsoplevelse og udveksling – fejl er uundgåelige, kun til reference! Hvis du finder en fejl, så gør det endelig opmærksom på det, mange tak!
2. SELinux' rolle og tilladelsesstyringsmekanismen
2.1 SELinux' rolle
SELinux' hovedfunktion er at minimere de ressourcer, som serviceprocesser i systemet kan tilgå (princippet om mindst privilegium).
Forestil dig, at hvis en netværkstjeneste, der kører som root, har en 0day-sårbarhed, kan hackere udnytte denne sårbarhed til at gøre, hvad de vil på din server som root. Er det ikke skræmmende?
SELinux er her for at løse dette problem.
2.2 DAC
I et operativsystem, der ikke bruger SELinux, er faktoren, der afgør, om en ressource kan tilgås, om en ressource har tilladelser fra den tilsvarende bruger (læs, skriv, eksekver).
Så længe processen, der tilgår denne ressource, opfylder ovenstående betingelser, kan den tilgås.
Det mest fatale problem er, at root-brugere ikke er underlagt nogen regulering, og alle ressourcer på systemet kan tilgås uden begrænsninger.
Hoveddelen af denne tilladelsesstyringsmekanisme er brugeren, også kendt som autonom adgangskontrol (DAC).
2.3 MAC
I et operativsystem, der bruger SELinux, er de faktorer, der afgør, om en ressource kan tilgås, ikke kun ovenstående faktorer, men også om hver type proces har adgang til en bestemt type ressource.
På denne måde er det, selv hvis en proces kører som root, nødvendigt at bestemme typen af proces og hvilke typer ressourcer, der må tilgås, før man beslutter, om adgang til en ressource skal tillas. Processens aktive rum kan også komprimeres til et minimum.
Selv en serviceproces, der kører som root, har som regel kun adgang til de ressourcer, den har brug for. Selv hvis et program er sårbart, er omfanget af påvirkningen begrænset til de ressourcer, det har adgang til. Sikkerheden øges betydeligt.
Hoveddelen af denne tilladelsesstyringsmekanisme er processen, også kendt som obligatorisk adgangskontrol (MAC).
MAC er opdelt i to måder, den ene kaldes Category Security (MCS) mode, og den anden kaldes Multi-Level Security (MLS) mode.
Følgende handlinger er i MCS-tilstand.
2.4 Sammenligning af DAC og MAC
Her er et billede til at illustrere.
Som du kan se, kan den tilsvarende mappe i DAC-tilstand tilgås, så længe den tilsvarende mappe har brugerens rettigheder. I MAC-tilstand er det også begrænset af det udvalg af mapper, som processer har adgang til.
3. Grundlæggende begreber i SELinux
3.1 Emne
Det kan fuldstændigt sidestilles med en proces.
Bemærk: For nem forståelse betragtes processen, medmindre andet er angivet, som hoveddelen nedenfor.
3.2 Formål
Ressourcer tilgået af rektoren. Det kan være filer, mapper, porte, enheder osv.
Bemærk: For nemheds skyld, medmindre andet er angivet, betragtes følgende dokumenter eller kataloger som objekter.
3.3 Politik og regel
Der er som regel et stort antal filer og processer i systemet, og for at spare tid og overhead regulerer vi som regel kun visse processer selektivt.
Og hvilke processer der skal reguleres, og hvordan de skal kontrolleres, bestemmes af politikken.
Der er flere regler i en police. Nogle regler kan aktiveres eller deaktiveres efter behov (herefter kaldet booleske regler).
Reglerne er modulære og kan udvides. Når en ny applikation installeres, kan applikationen tilføje regler ved at tilføje nye moduler. Brugere kan også manuelt tilføje eller trække regler fra.
I CentOS 7-systemet findes der tre sæt politikker, nemlig:
1. målrettet: Kontrollerer de fleste netværksserviceprocesser. Dette er den politik, systemet bruger som standard (alle nedenfor bruges).
2. Minimum: Baseret på målrettede systemer reguleres kun udvalgte netværksserviceprocesser. Generelt ikke.
3. MLS: Flerniveaus sikkerhedsbeskyttelse. Reguler alle processer. Dette er den strengeste politik, og konfigurationen er meget vanskelig. Generelt bruges det ikke, medmindre der er ekstremt høje sikkerhedskrav.
Politikker kan sættes i /etc/selinux/config.
3.4 Sikkerhedskontekst
Sikkerhedskontekst er kernen i SELinux.
Sikkerhedskontekst Jeg opdeler det i "processikkerhedskontekst" og "dokumentsikkerhedskontekst".
En processikkerhedskontekst svarer typisk til flere dokumentsikkerhedskontekster.
Kun når sikkerhedskonteksten for de to svarer til, kan en proces få adgang til filen. Deres korrespondance bestemmes af reglerne i policen.
Filsikkerhedskonteksten bestemmes af, hvor filen blev oprettet, og den proces, der skabte den. Og systemet har et sæt standardværdier, og brugerne kan også indstille standardværdierne.
Det er vigtigt at bemærke, at det ikke ændrer sikkerhedskonteksten for dine filer blot at flytte filer.
Strukturen og betydningen af sikkerhedskonteksten
Sikkerhedskonteksten har fire felter, adskilt af kolon. Form som: system_u:object_r:admin_home_t:s0.
3.5 SELinux Arbejdstilstand
SELinux har tre driftsformer, nemlig:
1. håndhævet: Håndhævet tilstand. Overtrædelser af SELinux-reglerne vil blive blokeret og registreret i loggene.
2. Tilladende: Tolerance-mode. SELinux-regelovertrædelser logges kun i loggene. Generelt til fejlfinding.
3. deaktiveret: Sluk for SELinux.
SELinux-arbejdstilstand kan sættes i /etc/selinux/config.
Hvis du vil skifte fra deaktiveret til håndhævelse eller tilladelse, skal du genstarte systemet. Og omvendt.
Håndhævelses- og tilladelsestilstande kan hurtigt skiftes med Setenforce 1|0-kommandoen.
Det er vigtigt at bemærke, at hvis systemet har kørt med SELinux slået fra i et stykke tid, kan den første genstart efter SELinux er tændt være langsommere. Fordi systemet skal skabe en sikker kontekst for filerne på disken (jeg sagde, jeg genstartede i cirka 10 minutter og troede, den var død...... )。
SELinux-logs skal logges med hjælp fra auditd.service, venligst deaktivér dem ikke.
3.6 SELinux Arbejdsgang
Her er et citat fra et billede, uden meget forklaring.
Bemærk: Sikkerhedsteksten ovenfor henviser til sikkerhedskonteksten.
4. Grundlæggende SELinux-operationer
4.1 Forespørg sikkerhedskonteksten for en fil eller mappe
Kommando grundlæggende brug
ls -Z
Eksempler på anvendelse
Forespørg sikkerhedskonteksten for /etc/hosts.
ls -Z /etc/hosts
Udførelsesresultater
-rw-r-r--. rodrod system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Forespørg processens sikkerhedskontekst
Kommando grundlæggende brug
ps auxZ | grep -v grep | greb
Eksempler på anvendelse
Forespørg sikkerhedskonteksten for Nginx-relaterede processer.
ps auxZ | grep -v grep | grep nginx
Udførelsesresultater
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: worker process
4.3 Manuelt modificerer sikkerhedskonteksten for en fil eller mappe
Kommando grundlæggende brug
CHCON [...]
Optionsfunktion -u Ændr brugerfeltet i sikkerhedskonteksten -r Ændr rollefeltet i sikkerhedskonteksten -t Ændr typefeltet for sikkerhedskonteksten -l Ændr niveaufeltet i sikkerhedskonteksten --reference Ændr sikkerhedskonteksten i overensstemmelse med den angivne fil eller mappe -R Rekursiv operation -h Ændr sikkerhedskonteksten for soft linket (ændr den tilsvarende fil for soft link uden denne mulighed)
Eksempler på anvendelse
Ændr sikkerhedskonteksten for testen til aaa_u:bbb_r:ccc_t:s0.
CHCON -U aaa_u -R bbb_r -T ccc_t Test
4.4 Tilbagefør sikkerhedskonteksten for en fil eller mappe til dens standardværdi
Kommando grundlæggende brug
restorecon [muligheder] [...]
Optionsfunktion - V Printoperation Procedure - R Rekursiv Operation
Eksempler på anvendelse
Efter du har tilføjet nogle webfiler til mappen på din Nginx-server, skal du sætte den korrekte sikkerhedskontekst for disse nye filer.
restorecon -R /usr/share/nginx/html/
4.5 Forespørgsel Booleske regler og deres status i systemet
Kommando grundlæggende brug
getsebool -a
Da kommandoen enten forespørger alle regler eller kun én regel, forespørger den som regel alle regler først og filtrerer derefter med grep.
Eksempler på anvendelse
Forespørg booleske regler relateret til httpd.
getsebool -a | grep httpd
Udførelsesresultater
httpd_anon_write --> af
httpd_builtin_scripting --> på
httpd_can_check_spam --> væk
httpd_can_connect_ftp --> væk
#以下省略
4.6 Skift af en boolesk regel
Kommando grundlæggende brug
setsebool [mulighed]
Mulighedsfunktionen -P genstart træder stadig i kraft
Eksempler på anvendelse
Tænd httpd_anon_write regler.
setsebool -P httpd_anon_write på
4.7 Tilføj en standard sikkerhedskontekst for en mappe
Kommando grundlæggende brug
semanage fcontext -a -t "(/.*)?"
Bemærk: Standardsikkerhedskonteksten for en mappe eller fil kan vises ved at bruge kommandoen semanage fcontext -l i kombination med grep-filtrering.
Eksempler på anvendelse
Efter du tilføjer en ny sitemappe /usr/share/nginx/html2 til Nginx, skal du sætte samme standard sikkerhedskontekst for den som for den oprindelige mappe.
Semanage Fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Tilføj porte, der er tilladt af visse typer processer
Kommando grundlæggende brug
semanage port -a -t -p
Bemærk: Portnumrene tilladt for forskellige servicetyper kan ses ved at bruge kommandoen semanage port -l med grep-filtrering.
Eksempler på anvendelse
For Nginx skal du bruge port 10080 til HTTP-tjenester.
Semanage Port -A -t http_port_t -P TCP 10080
5. SELinux-fejlanalyse og -løsning
5.1 Forståelse af SELinux-logs
Når SELinux er aktiveret, betragtes en vis normal adfærd hos mange tjenester som en overtrædelse (både i titlen og i fejlene nedenfor).
På nuværende tidspunkt skal vi bruge SELinux-overtrædelseslogs til at analysere og løse dem.
SELinux-overtrædelseslogfiler gemmes i /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=(ingen) 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:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? ADDR=? terminal=cron res=succes'
...
Filen består af meget indhold, og det er blandet med mange systemrevisionslogs, som intet har med SELinux-fejl at gøre. Vi bruger sealert-værktøjet til at hjælpe med analysen (hvis prompten ikke kan finde kommandoen, installer setroubleshoot-pakken).
5.2 Analyser fejl med forseglingsmiddel
Kommando grundlæggende brug
sealert -a /var/log/audit/audit.log
Efter at have udført kommandoen, skal systemet tage sig tid til at analysere overtrædelserne i logbøgerne og levere en analyserapport. |