ĂversĂ€ttningen av artikeln Ă€r sĂ€rskilt utarbetad för studenter i kursen .

HÀr fÄr du svar pÄ viktiga frÄgor om livet, universum och allt annat relaterat till Linux med förbÀttrad sÀkerhet.
«En viktig sanning Ă€r att saker och ting inte alltid Ă€r som de verkar, det Ă€r allmĂ€nt kĂ€ntâŠÂ»
âDouglas Adams, RymdresenĂ€rens guide
SĂ€kerhet. Ăkad tillförlitlighet. Efterlevnad. Policy. Fyra apokalyptiska ryttare för systemadministratören. Utöver vĂ„ra dagliga uppgifter â övervakning, backup, implementering, konfigurering, uppdatering och sĂ„ vidare â ansvarar vi ocksĂ„ för sĂ€kerheten i vĂ„ra system. Ăven för de system dĂ€r en tredje part rekommenderar oss att stĂ€nga av förbĂ€ttrad sĂ€kerhet. Det Ă€r som att arbeta frĂ„n «Mission: Impossible».
Möter denna dilemma vÀljer vissa systemadministratörer att ta , för de tror att de aldrig kommer att fÄ veta svaret pÄ livets stora frÄga, universum och allt annat. Och, som vi alla vet, Àr svaret 42.
I anda av «RymdresenÀrens guide» presenteras hÀr 42 svar pÄ viktiga frÄgor om hantering och anvÀndning i dina system.
1. SELinux Àr ett system för tvingande Ätkomstkontroll, vilket innebÀr att varje process har en etikett (label). Varje fil, katalog och systemobjekt har ocksÄ etiketter. Regelverk övervakar Ätkomster mellan mÀrkta processer och objekt. KÀrnan sÀkerstÀller efterlevnad av dessa regler.
2. De tvĂ„ viktigaste koncepten Ă€r: MĂ€rkning â mĂ€rkning (filer, processer, portar etc.) och Typkontroll (som isolerar processer frĂ„n varandra baserat pĂ„ typer).
3. Den rÀtta etikettformatet anvÀndare:roll:typ:nivÄ (valfritt).
4. MĂ„let med att tillhandahĂ„lla fler nivĂ„er av sĂ€kerhet (Multi-Level Security â MLS) Ă€r att hantera processer (domĂ€ner) baserat pĂ„ sĂ€kerhetsnivĂ„n av de data som de ska anvĂ€nda. Till exempel fĂ„r en hemlig process inte lĂ€sa överhemliga data.
5. Att tillhandahĂ„lla mĂ„ngkategorisk sĂ€kerhet (Multi-Category Security â MCS) skyddar liknande processer frĂ„n varandra (till exempel virtuella maskiner, OpenShift-mekanismer, SELinux-sandlĂ„dor, containrar etc.).
6. KÀrninstÀllningar för att Àndra SELinux-lÀgen vid uppstart:
autorelabel=1â fĂ„r systemet att köra ommĂ€rkningselinux=0â kĂ€rnan laddar inte infrastruktur för SELinuxenforcing=0â laddar i permissive-lĂ€ge
7. Om du behöver ommÀrka hela systemet:
# touch /.autorelabel
#reboot
Om systemets mÀrkning innehÄller mÄnga fel kan det vara nödvÀndigt att starta i permissiv lÀge för att ommÀrkningen ska lyckas.
8. För att kontrollera om SELinux Àr aktiverat: # getenforce
9. För att tillfÀlligt aktivera/avaktivera SELinux: # setenforce [1|0]
10. Kontrollera status för SELinux: # sestatus
11. Konfigurationsfil: /etc/selinux/config
12. Hur fungerar SELinux? HÀr Àr ett exempel pÄ mÀrkning för webbservern Apache:
- BinÀrt vÀrde:
/usr/sbin/httpdâhttpd_exec_t - Konfigurationskatalog:
/etc/httpdâhttpd_config_t - Loggfiler katalog:
/var/log/httpd â httpd_log_t - InnehĂ„llskatalog:
/var/www/html â httpd_sys_content_t - Startskript:
/usr/lib/systemd/system/httpd.service â httpd_unit_file_d - Process:
/usr/sbin/httpd -DFOREGROUND â httpd_t - Portar:
80/tcp, 443/tcp â httpd_t, http_port_t
Processen som körs i kontext httpd_t, kan interagera med objekt med mÀrkning httpd_something_t.
13. MÄnga kommandon accepterar argumentet -Z för att visa, skapa och Àndra kontext:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Kontexter sÀtts nÀr filer skapas baserat pÄ kontexten för deras överordnade katalog (med vissa undantag). RPM kan stÀlla in kontexter bÄde vid installation.
14. Det finns fyra huvudsakliga orsaker till SELinux-fel, som beskrivs mer utförligt i punkterna 15-21 nedan:
- MĂ€rkningsproblem
- PÄ grund av nÄgot som SELinux behöver veta
- Fel i SELinux-policy/applikation
- Din information kan vara kompromissad
15. MÀrkningsproblem: om dina filer i /srv/myweb Àr felaktigt mÀrkta kan Ätkomst nekas. HÀr Àr nÄgra sÀtt att ÄtgÀrda detta:
- Om du kÀnner till mÀrkningen:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Om du kÀnner till en fil med motsvarande mÀrkning:
# semanage fcontext -a -e /srv/myweb /var/www - Ă
terstÀll kontexten (för bÄda fallen):
# restorecon -vR /srv/myweb
16. MÀrkningsproblem: om du flyttar en fil istÀllet för att kopiera den kommer filen att behÄlla sin ursprungliga kontext. För att ÄtgÀrda detta:
- Ăndra kontextkommandot till mĂ€rkning:
# chcon -t httpd_system_content_t /var/www/html/index.html - Ăndra kontextkommandot till mĂ€rkning av lĂ€nk:
# chcon --reference /var/www/html/ /var/www/html/index.html - Ă
terstÀll kontexten (för bÄda fallen):
# restorecon -vR /var/www/html/
17. Om SELinux behöver veta, att HTTPD lyssnar pÄ port 8585, informera SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux behöver veta logiska vÀrden som gör det möjligt att Àndra delar av SELinux-policyn under körning utan att behöva kÀnna till ompolicering av SELinux. Till exempel, om du vill att httpd ska skicka e-post, skriv: # setsebool -P httpd_can_sendmail 1
19. SELinux behöver veta logiska vÀrden för att aktivera/avaktivera SELinux-instÀllningar:
- För att se alla logiska vÀrden:
# getsebool -a - För att se beskrivningen av varje:
# semanage boolean -l - För att stÀlla in ett logiskt vÀrde:
# setsebool [_boolean_] [1|0] - För permanent installation, lÀgg till
-PJuniper (MX/QFX/ACX)# setsebool httpd_enable_ftp_server 1 -P
20. SELinux-policyer/applikationer kan innehÄlla fel, inklusive:
- Ovanliga kodvÀgar
- Konfigurationer
- Omdirigera stdout
- FilhandtaglÀckor
- Exekverbart minne
- DÄligt konstruerade bibliotek
Ăppna biljetter (skicka inte rapporten till Bugzilla; det finns ingen SLA i Bugzilla).
21. Din information kan vara kompromissad, om du har begrÀnsade domÀner som försöker:
- Ladda kÀrnmoduler
- StÀnga av enforced-lÀget för SELinux
- Skriva till
etc_t/shadow_t - Ăndra iptables-regler
22. SELinux-verktyg för att utveckla policymoduler:
# yum -y install setroubleshoot setroubleshoot-server
Starta om eller starta om auditd efter installation.
23. AnvÀnd
journalctl för att visa en lista över alla loggar relaterade till setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. AnvÀnd journalctl för att visa en lista över alla loggar relaterade till en specifik SELinux-tagg. Till exempel:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Vid ett SELinux-fel, anvÀnd loggen setroubleshoot med flera möjliga lösningar.
Till exempel frÄn journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux hindrar httpd frÄn att fÄ getattr-Ätkomst pÄ filen /var/www/html/index.html. För komplett meddelande kör: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux hindrar httpd frÄn att fÄ getattr-Ätkomst pÄ filen /var/www/html/index.html.
***** Plugin restorecon (99.5 % sÀkerhet) föreslÄr ************************
Om du vill fixa etiketten,
/var/www/html/index.html:s standardetikett bör vara httpd_syscontent_t.
DÄ kan du anvÀnda restorecon.
Kör
# /sbin/restorecon -v /var/www/html/index.html26. Loggning: SELinux registrerar information pÄ mÄnga stÀllen:
- /var/log/messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Loggning: sök efter SELinux-fel i auditloggen:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. För att hitta meddelanden frÄn SELinux Access Vector Cache (AVC) för en viss tjÀnst:
# ausearch -m avc -c httpd
29. Verktyg audit2allow samlar information frÄn loggar av nekade operationer och genererar sedan SELinux policyregel. Till exempel:
- För att skapa en lÀsbar beskrivning av varför Ätkomsten nekades:
# audit2allow -w -a - För att visa en regel för tvingande typ som tillÄter nekad Ätkomst:
# audit2allow -a - För att skapa en anvÀndarmodul:
# audit2allow -a -M mypolicy - Alternativ
-Mskapar en fil för tvingande tillÀmpning av typ (.te) med angivet namn och kompilerar regeln till en policypaket (.pp):mypolicy.pp mypolicy.te - För att installera en anvÀndarmodul:
# semodule -i mypolicy.pp
30. För att konfigurera enskilda processer (domÀner) att arbeta i permissive-lÀge: # semanage permissive -a httpd_t
31. Om du inte lÀngre vill att domÀnen ska vara permissive: # semanage permissive -d httpd_t
32. För att stÀnga av alla permissive domÀner: # semodule -d permissivedomains
33. Aktivera MLS-policy för SELinux: # yum install selinux-policy-mls
i /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Se till att SELinux körs i permissive-lÀge: # setenforce 0
AnvÀnd skriptet fixfiles, för att sÀkerstÀlla att filer kommer att ommÀrkas vid nÀsta omstart:
# fixfiles -F onboot # reboot
34. Skapa en anvÀndare med en viss MLS-intervall: # useradd -Z staff_u john
Genom att anvÀnda kommandot useradd, koppla den nya anvÀndaren till en befintlig SELinux-anvÀndare (i detta fall, staff_u).
35. För att se matchningen mellan SELinux-anvÀndare och Linux: # semanage login -l
36. Definiera ett specifikt intervall för anvÀndaren: # semanage login --modify --range s2:c100 john
37. För att korrigera etiketten i anvÀndarens hemmakatalog (om nödvÀndigt): # chcon -R -l s2:c100 /home/john
38. För att se aktuella kategorier: # chcat -L
39. För att Àndra kategorier eller börja skapa egna, Àndra filen enligt följande:
\/etc\/selinux\/_<selinuxtype>_\/setrans.conf
40. För att köra ett kommando eller skript i en viss fil, roll och anvÀndarkontext:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tfilens kontext-rrollens kontext-uanvÀndarens kontext
41. Containrar som körs med inaktiverad SELinux:
- Podman:
# podman run --security-opt label=disable ⊠- Docker:
# docker run --security-opt label=disable âŠ
42. Om du behöver ge containern fullstÀndig Ätkomst till systemet:
- Podman:
# podman run --privileged ⊠- Docker:
# docker run --privileged âŠ
Och nu vet du redan svaret. DÀrför, vÀnligen: panikera inte och aktivera SELinux.
LĂ€nkar:
- by
- av Dan Walsh
- by
- by
KĂ€lla: habr.com
