Ero sivun ”Security-Enhanced Linux” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
Ei muokkausyhteenvetoa
Lokien tarkastelu ja vianmääritys
 
(10 välissä olevaa versiota 4 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{Hakemistorakenne}}
{{Ohjelma
{{Ohjelma
| nimi=SELinux
| nimi           = Security-Enhanced Linux
| kuva=
| logo          =  
| kuvateksti=
| kuva           =  
| lisenssi=[[GPL]]
| kuvateksti     =  
| käyttöliittymä=teksti
| tekijä        = [[wikipedia:fi:NSA|NSA]] ja [[Red Hat]]
| kotisivu=[http://selinuxproject.org/ selinuxproject.org]
| kehittäjä      = Red Hat
| lisenssi       = [[GPL]]
| käyttöliittymä = teksti
| kotisivu       = [http://selinuxproject.org/ selinuxproject.org]<br><li>[https://web.archive.org/web/20201022103915/https://www.nsa.gov/what-we-do/research/selinux/ nsa.gov/what-we-do/research/selinux/]{{InternetArchive}}
| lähdekoodi    = https://github.com/SELinuxProject/selinux
}}
}}


'''SELinux''' (''Security-Enhanced Linux'') on [[wikipedia:fi:NSA|NSA]]:n kehittämä turvallisuusjärjestelmä, joka rajoittaa ohjelmien toimintaoikeuksia niille kirjoitettujen sääntöjen mukaan. Tarkoituksena on estää ohjelmia suorittamasta vaarallisia toimintoja, joko tarkoituksella tai esimerkiksi puskuriylivuotojen kautta. SELinux on käytössä useimmissa [[Fedora]]-pohjaisissa jakeluissa, kuten [[RHEL]]-, [[CentOS]]-, ja [[Scientific Linux]] -jakeluissa.
'''Security-Enhanced Linux''' (''SELinux'') on [[wikipedia:fi:NSA|NSA]]:n kehittämä turvallisuusjärjestelmä, joka rajoittaa ohjelmien toimintaoikeuksia niille kirjoitettujen sääntöjen mukaan. Tarkoituksena on estää ohjelmia suorittamasta vaarallisia toimintoja, joko tarkoituksella tai esimerkiksi puskuriylivuotojen kautta. SELinux on käytössä useimmissa [[Fedora Linux]]-pohjaisissa jakeluissa, kuten [[RHEL]]- ja [[Rocky Linux]] -jakeluissa.


==Käyttö==
==Käyttö==
Rivi 14: Rivi 19:
===Tilat===
===Tilat===
SELinuxilla on kolme eri tilaa: <tt>enforcing</tt>, <tt>permissive</tt> ja <tt>disabled</tt>. Enforcing pakottaa SELinuxin politiikan koko järjestelmään ja pitää huolta siitä että käyttäjien ja prosessien luvattomat toiminnot estetään ja kirjoitetaan lokiin. Permissive ei estä luvattomia toimintoja, mutta kirjoittaa ne lokitiedostoon. Permissive on hyvä tapa tutkia ja varmistaa SELinuxin toimivuus ennen käyttöönottoa. Disabled poistaa SELinuxin kokonaan käytöstä.
SELinuxilla on kolme eri tilaa: <tt>enforcing</tt>, <tt>permissive</tt> ja <tt>disabled</tt>. Enforcing pakottaa SELinuxin politiikan koko järjestelmään ja pitää huolta siitä että käyttäjien ja prosessien luvattomat toiminnot estetään ja kirjoitetaan lokiin. Permissive ei estä luvattomia toimintoja, mutta kirjoittaa ne lokitiedostoon. Permissive on hyvä tapa tutkia ja varmistaa SELinuxin toimivuus ennen käyttöönottoa. Disabled poistaa SELinuxin kokonaan käytöstä.
Oletuksena SELinux on Enforcing-tilassa.


SELinuxin tilan voi katsoa esimerkiksi <tt>getenforce</tt> tai <tt>sestatus</tt> -komennoilla, joista <tt>sestatus</tt> näyttää enemmän tietoa,
SELinuxin tilan voi katsoa esimerkiksi <tt>getenforce</tt> tai <tt>sestatus</tt> -komennoilla, joista <tt>sestatus</tt> näyttää enemmän tietoa,
  $ getenforce  
  $ getenforce  
  Enforcing
  Enforcing
sestatus
SELinux status:                enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:        /etc/selinux
Loaded policy name:            targeted
Current mode:                  enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:    allowed
Max kernel policy version:      28


===Käyttöönotto===
===Käyttöönotto===
Rivi 24: Rivi 43:
Tietokone pitää käynnistää uudelleen jotta asetukset astuvat voimaan. Tämän jälkeen SELinuxin lokia voidaan tarkastella <tt>/var/log/messages</tt> -tiedostosta. Esimerkiksi jos SELinux estää jonkun prosessin toiminnan, voidaan se tarkastaa lokista:
Tietokone pitää käynnistää uudelleen jotta asetukset astuvat voimaan. Tämän jälkeen SELinuxin lokia voidaan tarkastella <tt>/var/log/messages</tt> -tiedostosta. Esimerkiksi jos SELinux estää jonkun prosessin toiminnan, voidaan se tarkastaa lokista:
  # cat /var/log/messages | grep "SELinux is preventing"
  # cat /var/log/messages | grep "SELinux is preventing"
Nykyaikaisissa, erityisesti RHEL-pohjaisissa järjestelmissä, lokienhallinta tapahtuu [[systemd-journald]]-palvelun kautta. Lisäksi SELinux-kieltäytymisten analysointiin on olemassa tehokkaampia työkaluja:
* [[journalctl]]: Moderni tapa tarkastella järjestelmälokeja.
* [[sealert]] on osa [[setroubleshoot-server]] -pakettia, joka parsii kieltäytymiset ja antaa suoraan korjausehdotuksia (esim. tarvittavat audit2allow-komennot).
* [[ausearch]] ja [[sealert]]: Parhaat työkalut SELinux-kieltäytymisten (denials) tutkimiseen.
ausearch: etsii lokista tietyt SELinuxin kieltämät toiminnot.
Esimerkiksi:
ausearch -m AVC -ts recent
=== Turvallisuuspolitiikat (Policy) ===
Toimintatilan lisäksi SELinuxissa on turvallisuuspolitiikka eli policy. Politiikkalajeja on kolme:
* Strict
* Targeted: Useimmissa jakeluissa käytetty politiikka, joka kohdistaa sääntöjä vain tietyille kriittisille palveluille.
* Unconfined
Monet Linux-komennot näyttävät SELinux-tiedot <tt>Z</tt>-vivulla. Esimerkiksi <tt>ps</tt> ja <tt>ls</tt>.
=== Tiedostojen ja prosessien oikeudet ===
SELinux lisää käyttöoikeuksiin uuden ulottuvuuden. Tiedostoilla ja prosesseilla on SELinux-konteksti, joka koostuu useista osista järjestyksessä: ''user:role:type:mls''.
Ls-komento tarjoaa tuen näiden pääsyoikeuksien katselemiselle. Tiedostojen SELinux-oikeudet voi listata tällä komennolla:
ls -Z
Listauksessa näkyy nyt SELinux-kenttä, jossa on useita eri osia seuraavassa järjestyksessä: <tt>user:role:type:mls</tt>
Ps-komennolla on mahdollista katsoa helposti, mihin SELinux-käyttöoikeuteen mikäkin prosessi kuuluu:
ps axZ
Vastaavasti tiedostojen oikeuksia pääsee muuttamaan <tt>[[chcon]]</tt>-komennolla:
chcon -u <user> -t <type> -r <role> <tiedosto>
Esimerkiksi CentOS-järjestelmässä Apachelle voi antaa kirjoitusoikeuden uploads_dir-nimiseen kansioon:
chcon -t httpd_sys_rw_content_t uploads_dir
chcon tekee muutoksen, joka on vain väliaikainen (se ei säily tiedostojärjestelmän uudelleenmerkitsemisen jälkeen). Tuotantoympäristössä on oleellista käyttää työkaluja, jotka tallentavat muutokset SELinuxin politiikkatiedostoon.
Pysyvään muutokseen tarvitaan semanage fcontext ja restorecon:
* semanage fcontext: Määrittelee, mikä konteksti tiedostolla pitäisi olla.
* restorecon: Soveltaa politiikassa määritellyn kontekstin tiedostoon.
Esimerkiksi:
<syntaxhighlight lang="bash">
# Määrittele polku pysyvästi
# semanage fcontext -a -t httpd_sys_rw_content_t "/srv/www(/.*)?"
# Sovella määritelty konteksti tiedostoihin
# restorecon -Rv /srv/www
</syntaxhighlight>
Näin kansion SELinux-tyyppi muutetaan muotoon <tt>httpd_sys_rw_content_t</tt>. Nämä tyypit, kuten muutkin SELinux-asetukset ovat jakelukohtaisia.
=== Lokien tarkastelu ja vianmääritys ===
SELinuxin kanssa työskennellessä haastavinta on usein ymmärtää, miksi jokin prosessi tai sovellus estetään ja miten tämä estyminen korjataan (eli miten politiikkaa muokataan).
==== 1. SELinux-lokien sijainti ====
SELinux-tapahtumat kirjoitetaan Linuxin audit-järjestelmän kautta.
* Lokitiedosto: Suurin osa SELinuxin estotapahtumista (AVC-kielto, "Access Vector Cache denied") kirjataan tiedostoon ''/var/log/audit/audit.log''. Vanhemmissa tai muissa jakeluissa lokit voivat löytyä myös tiedostosta'' /var/log/messages'' tai ''/var/log/syslog''.
* Tärkeä avainsana: Lokiviestejä etsiessä kannattaa suodattaa avainsanalla ''SELINUX_ERR'' tai ''denied''.
==== 2. Apuohjelmat lokien tulkintaan ====
Raakojen lokiviestien tulkitseminen on työlästä. Auditing-työkalut muuttavat nämä viestit luettavaan muotoon.
* ausearch (Audit Search): Käytetään audit-lokitiedostojen selaamiseen ja suodattamiseen tiettyjen kriteerien perusteella, kuten SELinuxin kieltämien tapahtumien löytämiseen.
Esimerkki: Haetaan kaikki SELinuxin kieltämät tapahtumat:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
* audit2why (Audit to Why): Ottaa raa'an lokiviestin syötteenä ja selittää, miksi SELinux esti kyseisen toiminnon. Tämä työkalu auttaa ymmärtämään, mikä politiikan sääntö (tai sen puute) aiheutti kiellon.
Esimerkki: Koko lokitiedoston viestien muuntaminen selityksiksi:
# cat /var/log/audit/audit.log | audit2why
* audit2allow: Varoituksella käytettävä työkalu, joka ottaa lokiviestin ja generoi uuden SELinux-politiikkasäännön, joka sallisi estetyt toiminnot. Tätä työkalua käytetään yleensä viimeisenä keinona tai kun on täysin varma, että sovelluksen toiminnan salliminen on turvallista. Sitä tulisi käyttää harkiten, jotta turvallisuusjärjestelmän tarkoitus ei vesity.
Esimerkki: Lokitietojen perusteella luodaan uusi politiikkamoduuli sallimaan estetyt toiminnot:
# grep "denied" /var/log/audit/audit.log | audit2allow -M myapp_policy
# semodule -i myapp_policy.pp
==Aiheesta muualla==
*[https://fedoraproject.org/wiki/SELinux SELinux Fedoran wikissä]
*[https://wiki.centos.org/HowTos/SELinux CentOS SELinux HOWTO]
*[https://people.redhat.com/duffy/selinux/selinux-coloring-book_A4-Stapled.pdf SELinux värityskirja] - Ohjelman toiminta yksinkertaisesti selostettuna värityskirjan muodossa
*[https://people.redhat.com/dwalsh/SELinux/Presentations/ManageRHEL4.pdf Managing Red Hat Enterprise Linux 4]
*[https://people.redhat.com/dwalsh/SELinux/Presentations/ManageRHEL5.pdf Managing Red Hat Enterprise Linux 5]


[[Luokka:Tietoturva]]
[[Luokka:Tietoturva]]
{{Malline:Palvelin}}

Nykyinen versio 10. marraskuuta 2025 kello 23.09

Hakemistorakenne

/

/bin
/boot
/dev
/etc
/home
/lib
/lost+found
/media
/mnt
/opt
/proc
/root
/run
/sbin
/selinux
/sources
/srv
/sys
/tmp
/usr
/var
Security-Enhanced Linux
Tekijä(t) NSA ja Red Hat
Kehittäjä(t) Red Hat
Käyttöliittymä teksti
Lisenssi GPL
Kotisivu selinuxproject.org
  • nsa.gov/what-we-do/research/selinux/[Wayback Machine]
  • Lähdekoodi https://github.com/SELinuxProject/selinux

    Security-Enhanced Linux (SELinux) on NSA:n kehittämä turvallisuusjärjestelmä, joka rajoittaa ohjelmien toimintaoikeuksia niille kirjoitettujen sääntöjen mukaan. Tarkoituksena on estää ohjelmia suorittamasta vaarallisia toimintoja, joko tarkoituksella tai esimerkiksi puskuriylivuotojen kautta. SELinux on käytössä useimmissa Fedora Linux-pohjaisissa jakeluissa, kuten RHEL- ja Rocky Linux -jakeluissa.

    Käyttö

    [muokkaa]
    Komennot, jotka alkavat $-merkillä suoritetaan tavallisena käyttäjänä ja komennot, jotka alkavat #-merkillä suoritetaan pääkäyttäjänä. Katso myös su, sudo ja doas.

    Tilat

    [muokkaa]

    SELinuxilla on kolme eri tilaa: enforcing, permissive ja disabled. Enforcing pakottaa SELinuxin politiikan koko järjestelmään ja pitää huolta siitä että käyttäjien ja prosessien luvattomat toiminnot estetään ja kirjoitetaan lokiin. Permissive ei estä luvattomia toimintoja, mutta kirjoittaa ne lokitiedostoon. Permissive on hyvä tapa tutkia ja varmistaa SELinuxin toimivuus ennen käyttöönottoa. Disabled poistaa SELinuxin kokonaan käytöstä.

    Oletuksena SELinux on Enforcing-tilassa.

    SELinuxin tilan voi katsoa esimerkiksi getenforce tai sestatus -komennoilla, joista sestatus näyttää enemmän tietoa,

    $ getenforce 
    Enforcing
    
    sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      28
    


    Käyttöönotto

    [muokkaa]

    SELinuxin asetustiedosto on /etc/selinux/config. SELinux voidaan ottaa käyttöön muokkaamalla asetustiedostoa asettamalla sinne haluttu tila.

    SELINUX=enforcing
    

    Tietokone pitää käynnistää uudelleen jotta asetukset astuvat voimaan. Tämän jälkeen SELinuxin lokia voidaan tarkastella /var/log/messages -tiedostosta. Esimerkiksi jos SELinux estää jonkun prosessin toiminnan, voidaan se tarkastaa lokista:

    # cat /var/log/messages | grep "SELinux is preventing"
    

    Nykyaikaisissa, erityisesti RHEL-pohjaisissa järjestelmissä, lokienhallinta tapahtuu systemd-journald-palvelun kautta. Lisäksi SELinux-kieltäytymisten analysointiin on olemassa tehokkaampia työkaluja:

    • journalctl: Moderni tapa tarkastella järjestelmälokeja.
    • sealert on osa setroubleshoot-server -pakettia, joka parsii kieltäytymiset ja antaa suoraan korjausehdotuksia (esim. tarvittavat audit2allow-komennot).
    • ausearch ja sealert: Parhaat työkalut SELinux-kieltäytymisten (denials) tutkimiseen.

    ausearch: etsii lokista tietyt SELinuxin kieltämät toiminnot. Esimerkiksi:

    ausearch -m AVC -ts recent
    

    Turvallisuuspolitiikat (Policy)

    [muokkaa]

    Toimintatilan lisäksi SELinuxissa on turvallisuuspolitiikka eli policy. Politiikkalajeja on kolme:

    • Strict
    • Targeted: Useimmissa jakeluissa käytetty politiikka, joka kohdistaa sääntöjä vain tietyille kriittisille palveluille.
    • Unconfined

    Monet Linux-komennot näyttävät SELinux-tiedot Z-vivulla. Esimerkiksi ps ja ls.

    Tiedostojen ja prosessien oikeudet

    [muokkaa]

    SELinux lisää käyttöoikeuksiin uuden ulottuvuuden. Tiedostoilla ja prosesseilla on SELinux-konteksti, joka koostuu useista osista järjestyksessä: user:role:type:mls.

    Ls-komento tarjoaa tuen näiden pääsyoikeuksien katselemiselle. Tiedostojen SELinux-oikeudet voi listata tällä komennolla:

    ls -Z
    

    Listauksessa näkyy nyt SELinux-kenttä, jossa on useita eri osia seuraavassa järjestyksessä: user:role:type:mls

    Ps-komennolla on mahdollista katsoa helposti, mihin SELinux-käyttöoikeuteen mikäkin prosessi kuuluu:

    ps axZ
    

    Vastaavasti tiedostojen oikeuksia pääsee muuttamaan chcon-komennolla:

    chcon -u <user> -t <type> -r <role> <tiedosto>
    

    Esimerkiksi CentOS-järjestelmässä Apachelle voi antaa kirjoitusoikeuden uploads_dir-nimiseen kansioon:

    chcon -t httpd_sys_rw_content_t uploads_dir
    

    chcon tekee muutoksen, joka on vain väliaikainen (se ei säily tiedostojärjestelmän uudelleenmerkitsemisen jälkeen). Tuotantoympäristössä on oleellista käyttää työkaluja, jotka tallentavat muutokset SELinuxin politiikkatiedostoon.

    Pysyvään muutokseen tarvitaan semanage fcontext ja restorecon:

    • semanage fcontext: Määrittelee, mikä konteksti tiedostolla pitäisi olla.
    • restorecon: Soveltaa politiikassa määritellyn kontekstin tiedostoon.

    Esimerkiksi:

     # Määrittele polku pysyvästi
     # semanage fcontext -a -t httpd_sys_rw_content_t "/srv/www(/.*)?"
    
     # Sovella määritelty konteksti tiedostoihin
     # restorecon -Rv /srv/www
    

    Näin kansion SELinux-tyyppi muutetaan muotoon httpd_sys_rw_content_t. Nämä tyypit, kuten muutkin SELinux-asetukset ovat jakelukohtaisia.

    Lokien tarkastelu ja vianmääritys

    [muokkaa]

    SELinuxin kanssa työskennellessä haastavinta on usein ymmärtää, miksi jokin prosessi tai sovellus estetään ja miten tämä estyminen korjataan (eli miten politiikkaa muokataan).

    1. SELinux-lokien sijainti

    [muokkaa]

    SELinux-tapahtumat kirjoitetaan Linuxin audit-järjestelmän kautta.

    • Lokitiedosto: Suurin osa SELinuxin estotapahtumista (AVC-kielto, "Access Vector Cache denied") kirjataan tiedostoon /var/log/audit/audit.log. Vanhemmissa tai muissa jakeluissa lokit voivat löytyä myös tiedostosta /var/log/messages tai /var/log/syslog.
    • Tärkeä avainsana: Lokiviestejä etsiessä kannattaa suodattaa avainsanalla SELINUX_ERR tai denied.

    2. Apuohjelmat lokien tulkintaan

    [muokkaa]

    Raakojen lokiviestien tulkitseminen on työlästä. Auditing-työkalut muuttavat nämä viestit luettavaan muotoon.

    • ausearch (Audit Search): Käytetään audit-lokitiedostojen selaamiseen ja suodattamiseen tiettyjen kriteerien perusteella, kuten SELinuxin kieltämien tapahtumien löytämiseen.

    Esimerkki: Haetaan kaikki SELinuxin kieltämät tapahtumat:

    # ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
    
    • audit2why (Audit to Why): Ottaa raa'an lokiviestin syötteenä ja selittää, miksi SELinux esti kyseisen toiminnon. Tämä työkalu auttaa ymmärtämään, mikä politiikan sääntö (tai sen puute) aiheutti kiellon.

    Esimerkki: Koko lokitiedoston viestien muuntaminen selityksiksi:

    # cat /var/log/audit/audit.log | audit2why
    
    • audit2allow: Varoituksella käytettävä työkalu, joka ottaa lokiviestin ja generoi uuden SELinux-politiikkasäännön, joka sallisi estetyt toiminnot. Tätä työkalua käytetään yleensä viimeisenä keinona tai kun on täysin varma, että sovelluksen toiminnan salliminen on turvallista. Sitä tulisi käyttää harkiten, jotta turvallisuusjärjestelmän tarkoitus ei vesity.

    Esimerkki: Lokitietojen perusteella luodaan uusi politiikkamoduuli sallimaan estetyt toiminnot:

    # grep "denied" /var/log/audit/audit.log | audit2allow -M myapp_policy
    # semodule -i myapp_policy.pp
    

    Aiheesta muualla

    [muokkaa]
    v  k  m
    Palvelin
     Ylläpito  SSH | Tietoturva | Käyttäjien hallinta | Systemd | iptables | Security-Enhanced Linux | AppArmor
     Palvelintyypit  Web-palvelin | Sähköposti | Tietokanta | NFS | Samba
     Komentorivi  Komentorivin perusteet | Komentorivikomennot | Bash-skriptaus
     Tekstieditoreja  nano | vi | emacs
    Palvelin-luokka