ProHoster > Blog > administration > SELinux snydeark til systemadministratorer: 42 svar på vigtige spørgsmål
SELinux snydeark til systemadministratorer: 42 svar på vigtige spørgsmål
Oversættelsen af artiklen er udarbejdet specifikt til kursets studerende "Linux-administrator".
Her får du svar på vigtige spørgsmål om livet, universet og alt i Linux med forbedret sikkerhed.
"Den vigtige sandhed, at tingene ikke altid er, som de ser ud til, er almindelig viden..."
- Douglas Adams, The Hitchhiker's Guide to the Galaxy
Sikkerhed. Øget pålidelighed. Korrespondance. Politik. Fire Horsemen of the Apocalypse sysadmin. Udover vores daglige opgaver - overvågning, backup, implementering, konfiguration, opdatering osv. - er vi også ansvarlige for sikkerheden af vores systemer. Selv de systemer, hvor tredjepartsudbyderen anbefaler, at vi deaktiverer forbedret sikkerhed. Det føles som arbejde Ethan Hunt fra "Mission: Impossible".
Stillet over for dette dilemma beslutter nogle systemadministratorer at tage det blå pille, fordi de tror, de aldrig vil kende svaret på det store spørgsmål om livet, universet og alt det der. Og som vi alle ved, er svaret 42.
I ånden af The Hitchhiker's Guide to the Galaxy er her 42 svar på vigtige spørgsmål om kontrol og brug. SELinux på dine systemer.
1. SELinux er et tvungen adgangskontrolsystem, hvilket betyder, at hver proces har en etiket. Hver fil, mappe og systemobjekt har også etiketter. Politikregler styrer adgangen mellem taggede processer og objekter. Kernen håndhæver disse regler.
2. De to vigtigste begreber er: Mærkning — mærkninger (filer, processer, havne osv.) og Type håndhævelse (som isolerer processer fra hinanden baseret på typer).
4. Formålet med at levere sikkerhed på flere niveauer (Multi-Level Security - MLS) er at styre processer (domæner) baseret på sikkerhedsniveauet for de data, de vil bruge. For eksempel kan en hemmelig proces ikke læse tophemmelige data.
5. Sikring af multi-kategori sikkerhed (Multi-Category Security - MCS) beskytter lignende processer mod hinanden (for eksempel virtuelle maskiner, OpenShift-motorer, SELinux-sandkasser, containere osv.).
6. Kernelindstillinger til at ændre SELinux-tilstande ved opstart:
autorelabel=1 → får systemet til at køre ommærkning
selinux=0 → kernen indlæser ikke SELinux-infrastrukturen
enforcing=0 → indlæsning i tilladelig tilstand
7. Hvis du har brug for at ommærke hele systemet:
# touch /.autorelabel
#reboot
Hvis systemmærkningen indeholder et stort antal fejl, skal du muligvis starte i tilladelig tilstand for at bemærkning skal lykkes.
8. For at kontrollere, om SELinux er aktiveret: # getenforce
9. For midlertidigt at aktivere/deaktivere SELinux: # setenforce [1|0]
10. Kontrollerer SELinux-status: # sestatus
11. Konfigurationsfil: /etc/selinux/config
12. Hvordan virker SELinux? Her er et eksempel på mærkning for Apache-webserveren:
Proces kører i sammenhæng httpd_t, kan interagere med et mærket objekt httpd_something_t.
13. Mange kommandoer accepterer et argument -Z at se, skabe og ændre kontekst:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Kontekster etableres, når filer oprettes baseret på konteksten af deres overordnede mappe (med nogle undtagelser). RPM'er kan etablere sammenhænge som under installationen.
14. Der er fire hovedårsager til SELinux-fejl, som er beskrevet mere detaljeret i punkt 15-21 nedenfor:
Mærkningsproblemer
På grund af noget, som SELinux har brug for at vide
Fejl i SELinux politik/applikation
Dine oplysninger kan blive kompromitteret
15.Mærkningsproblem: hvis dine filer er i /srv/myweb er markeret forkert, kan adgang nægtes. Her er nogle måder at løse dette på:
Hvis du kender etiketten: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Hvis du kender en fil med tilsvarende markeringer: # semanage fcontext -a -e /srv/myweb /var/www
Gendannelse af konteksten (i begge tilfælde): # restorecon -vR /srv/myweb
16.Mærkningsproblem: hvis du flytter filen i stedet for at kopiere den, bevarer filen sin oprindelige kontekst. Sådan løser du dette problem:
Skift kontekstkommandoen med etiketten: # chcon -t httpd_system_content_t /var/www/html/index.html
Skift kontekstkommandoen med linketiketten: # chcon --reference /var/www/html/ /var/www/html/index.html
Gendan konteksten (i begge tilfælde): # restorecon -vR /var/www/html/
17. Hvis SELinux du har brug for at kendeat HTTPD lytter på port 8585, fortæl SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18.SELinux du har brug for at kende Booleske værdier, der tillader dele af SELinux-politikken at blive ændret under kørsel, uden at kendskab til SELinux-politikken overskrives. For eksempel, hvis du vil have httpd til at sende e-mail, skal du indtaste: # setsebool -P httpd_can_sendmail 1
19.SELinux du har brug for at kende logiske værdier for at aktivere/deaktivere SELinux-indstillinger:
For at se alle booleske værdier: # getsebool -a
For at se en beskrivelse af hver: # semanage boolean -l
Sådan indstilles en boolesk værdi: # setsebool [_boolean_] [1|0]
For en permanent installation, tilføj -P. For eksempel: # setsebool httpd_enable_ftp_server 1 -P
20. SELinux politikker/applikationer kan indeholde fejl, herunder:
Usædvanlige kodestier
konfigurationer
Omdirigerer stdout
Filbeskrivelsen lækker
Eksekverbar hukommelse
Dårligt byggede biblioteker
Åbne billetter (indsend ikke en rapport til Bugzilla; Bugzilla har ingen SLA).
21.Dine oplysninger kan blive kompromitterethvis du har begrænsede domæner, der forsøger at:
Indlæs kernemoduler
Deaktiver tvungen SELinux-tilstand
Skrive til etc_t/shadow_t
Skift iptables regler
22. SELinux værktøjer til udvikling af politikmoduler:
25. Hvis der opstår en SELinux-fejl, skal du bruge loggen setroubleshoot tilbyder flere mulige løsninger.
For eksempel fra journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
26. Logning: SELinux registrerer information mange steder:
27. Logning: søger efter SELinux-fejl i revisionsloggen:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Sådan finder du SELinux Access Vector Cache (AVC)-meddelelser for en bestemt tjeneste:
# ausearch -m avc -c httpd
29. Hjælpeprogram audit2allow indsamler oplysninger fra logfiler over forbudte operationer og genererer derefter SELinux-tilladelsespolitikregler. For eksempel:
Sådan oprettes en menneskelæselig beskrivelse af, hvorfor adgang nægtes: # audit2allow -w -a
Sådan får du vist en typehåndhævelsesregel, der tillader nægtet adgang: # audit2allow -a
Sådan opretter du et brugerdefineret modul: # audit2allow -a -M mypolicy
valgmulighed -M opretter en type håndhævelsesfil (.te) med det angivne navn og kompilerer reglen til en politikpakke (.pp): mypolicy.pp mypolicy.te
Sådan installeres et brugerdefineret modul: # semodule -i mypolicy.pp
30. Sådan konfigurerer du en separat proces (domæne) til at fungere i tilladelig tilstand: # semanage permissive -a httpd_t
31. Hvis du ikke længere ønsker, at domænet skal være tilladt: # semanage permissive -d httpd_t
32. Sådan deaktiverer du alle tilladelige domæner: # semodule -d permissivedomains
33. Aktivering af MLS SELinux-politik: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Sørg for, at SELinux kører i tilladelig tilstand: # setenforce 0
Brug et script fixfilesfor at sikre, at filerne ommærkes ved næste genstart:
# fixfiles -F onboot # reboot
34. Opret en bruger med et specifikt MLS-område: # useradd -Z staff_u john
Brug af kommandoen useradd, kortlæg den nye bruger til en eksisterende SELinux-bruger (i dette tilfælde, staff_u).
35. For at se kortlægningen mellem SELinux- og Linux-brugere: # semanage login -l
36. Definer et specifikt interval for brugeren: # semanage login --modify --range s2:c100 john