En begynderguide til SELinux

En begynderguide til SELinux

Oversættelsen af artiklen er forberedt til studerende på kurset «Sikkerhed i Linux»

SELinux eller Security Enhanced Linux er en forbedret adgangskontrolmekanisme, der er udviklet af det amerikanske National Security Agency (NSA) for at forhindre ondsindede indtrængen. Den implementerer en tvungen (eller mandat) adgangskontrolmodel (engelsk: Mandatory Access Control, MAC) oven på den eksisterende diskretionære (eller valgfrie) model (engelsk: Discretionary Access Control, DAC), som er tilladelser til læsning, skrivning og udførelse.

SELinux har tre tilstande:

  1. Enforcing — nægter adgang baseret på politikregler.
  2. Permissive — logger handlinger, der overtræder politik, som i enforcing-tilstand ville være blevet nægtet.
  3. Deaktiveret — fuldstændig deaktivering af SELinux.

Som standard er indstillingerne i /etc/selinux/config

Ændring af SELinux-tilstande

For at finde den nuværende tilstand, kør

$ getenforce

For at ændre tilstanden til permissive, kør følgende kommando:

$ setenforce 0

eller, for at ændre tilstanden fra permissive og få en fungerende kommando. tilenforcing, udfør

$ setenforce 1

Hvis du skal deaktivere SELinux helt, kan det kun gøres via konfigurationsfilen

$ vi /etc/selinux/config

For at deaktivere ændrer du SELINUX-parameteren til:

SELINUX=disabled

Konfiguration af SELinux

Hver fil og proces mærkes med en SELinux-kontekst, som indeholder yderligere oplysninger som bruger, rolle, type osv. Hvis du aktiverer SELinux for første gang, skal du først konfigurere konteksten og mærkerne. Processen med at tildele mærker og kontekst er kendt som mærkning. For at starte mærkningen, ændrer vi i konfigurationsfilen tilstanden til permissive.

$ vi /etc/selinux/config
SELINUX=permissive

Efter indstilling af tilstanden permissive, opretter vi en tom skjult fil ved roden med navnet autorelabel

$ touch /.autorelabel

og genstarter computeren

$ init 6

Bemærk: Vi bruger tilstanden permissive til mærkning, da brug af tilstanden til kan føre til systemnedbrud under genstart.

Bekymre dig ikke, hvis opstarten hænger på en eller anden fil, mærkningen tager lidt tid. Når mærkningen er fuldført og din systemgenstart er sket, kan du gå til konfigurationsfilen og indstille tilstanden til, samt køre:

$ setenforce 1

Nu har du med succes aktiveret SELinux på din computer.

Overvåger logs

Der kan være opstået fejl under mærkning eller under systemets drift. For at tjekke, om SELinux fungerer korrekt, og om det blokerer adgangen til nogen porte, applikationer osv., skal du kigge i logfilerne. SELinux-loggen findes i /var/log/audit/audit.log, men du behøver ikke at læse den i sin helhed for at finde fejl. Du kan bruge værktøjet audit2why til at finde fejlene. Kør følgende kommando:

$ audit2why < /var/log/audit/audit.log

Som resultat vil du få en liste over fejl. Hvis der ikke var nogen fejl i loggen, vil der ikke blive vist nogen meddelelser.

Konfiguration af SELinux-politik

SELinux-politik er et sæt regler, som SELinux sikkerhedsmekanismen følger. Politikken definerer et sæt regler for et bestemt miljø. Nu vil vi undersøge, hvordan man konfigurerer politikker for at give adgang til forbudte tjenester.

1. Logiske værdier (switches)

Switches (booleans) giver mulighed for at ændre dele af politikken under drift uden at skulle oprette nye politikker. De giver mulighed for at foretage ændringer uden genstart eller recompilation af SELinux-politikker.

Eksempel
Lad os sige, at vi vil give offentlig adgang til en brugers hjemmemappe via FTP til læsning og skrivning, og vi har allerede delt den, men når vi prøver at få adgang, ser vi ikke noget. Dette skyldes, at SELinux-politikken forbyder FTP-serveren at læse og skrive i brugerens hjemmemappe. Vi skal ændre politikken, så FTP-serveren kan tilgå hjemmemapper. Lad os se om der er nogen switches til dette ved at udføre

$ semanage boolean -l

Denne kommando vil give en liste over tilgængelige switches med deres nuværende tilstand (tændt/on eller slukket/off) og en beskrivelse. Du kan præcisere søgningen ved at tilføje grep for kun at finde resultater, der relaterer til ftp:

$ semanage boolean -l | grep ftp

og finde følgende

ftp_home_dir        -> off       Tillad ftp at læse & skrive filer i brugers hjemmemappe

Denne switch er slukket, så vi vil tænde den ved hjælp af setsebool $ setsebool ftp_home_dir on

Nu vil vores ftp-daemon kunne få adgang til brugerens hjemmemappe.
Bemærk: Du kan også få en liste over tilgængelige switches uden beskrivelse ved at udføre getsebool -a

2. Etiketter og kontekst

Dette er den mest almindelige måde at implementere SELinux-politik på. Hver fil, mappe, proces og port er mærket med en SELinux-kontekst:

  • For files and folders, tags are stored as extended attributes in the file system and can be viewed with the following command:
    $ ls -Z /etc/httpd
  • For processes and ports, the kernel manages the tagging, and you can view these tags as follows:

en proces

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Eksempel
Now, let's look at an example to better understand tags and context. Suppose we have webserveren, which is instead of the directory /var/www/html/ использует /home/dan/html/. SELinux will consider this a policy violation, and you won't be able to view your web pages. This is because we haven't set the security context associated with the HTML files. To view the default security context, use the following command:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Here we received httpd_sys_content_t as the context for the HTML files. We need to set this security context for our current directory, which currently has the following context:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

An alternative command to check the security context of a file or directory:

$ semanage fcontext -l | grep '/var/www'

We will also use semanage to change the context after we find the correct security context. To change the context of /home/dan/html, execute the following commands:

$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(\/.*)?'
$ semanage fcontext -l | grep '/home/dan/html'
/home/dan/html(\/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

After the context is changed with semanage, the restorecon command will load the default context for files and directories. Our web server will now be able to read files from the folder /home/dan/html, as the security context for this folder has been changed to httpd_sys_content_t.

3. Creating Local Policies

There may be situations where the aforementioned methods are useless for you, and you get errors (avc/denial) in audit.log. When this happens, you need to create a local policy (Local policy). You can find all errors using audit2why, as described above.

To resolve errors, you can create a local policy. For example, if we get an error related to httpd (apache) or smbd (samba), we grep the errors and create a policy for them:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Her http_policy og smb_policy — dette er navne på de lokale politikker, vi har oprettet. Nu skal vi uploade disse oprettede lokale politikker til den nuværende SELinux-politik. Dette kan gøres som følger:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Vore lokale politikker er blevet indlæst, og vi bør ikke længere modtage nogen avc eller denial i audit.log.

Dette var mit forsøg på at hjælpe dig med at forstå SELinux. Jeg håber, at du efter at have læst denne artikel vil føle dig mere komfortabel med SELinux.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster