Pakollinen oikeuksien jakelumalli FreeBSD:ssä

Esittely

Voit tarjota palvelimen lisäsuojaustasoa käyttämällä mandaattimalli pääsyn jakelu. Tässä julkaisussa kuvataan, kuinka voit ajaa apachea vankilassa ja käyttää vain niitä komponentteja, jotka edellyttävät pääsyä apachen ja php:n toimimiseen oikein. Tällä periaatteella voit rajoittaa Apachen lisäksi myös mitä tahansa muuta pinoa.

Koulutus

Tämä menetelmä soveltuu vain ufs-tiedostojärjestelmään; tässä esimerkissä zfs käytetään pääjärjestelmässä ja ufs vankilassa, vastaavasti. Ensimmäinen askel on rakentaa ydin uudelleen; kun asennat FreeBSD:tä, asenna lähdekoodi.
Kun järjestelmä on asennettu, muokkaa tiedostoa:

/usr/src/sys/amd64/conf/GENERIC

Sinun tarvitsee vain lisätä yksi rivi tähän tiedostoon:

options     MAC_MLS

MLS/High-merkinnällä on hallitseva asema mls/low-tunnisteeseen nähden, sovellukset, jotka käynnistetään mls/low-tunnisteella, eivät pääse käsiksi tiedostoihin, joissa on mls/high-tunniste. Lisätietoja kaikista FreeBSD-järjestelmän käytettävissä olevista tageista löytyy tästä johto.
Siirry seuraavaksi /usr/src-hakemistoon:

cd /usr/src

Aloita ytimen rakentaminen suorittamalla (määritä j-näppäimessä järjestelmän ytimien määrä):

make -j 4 buildkernel KERNCONF=GENERIC

Kun ydin on käännetty, se on asennettava:

make installkernel KERNCONF=GENERIC

Kun olet asentanut ytimen, älä kiirehdi käynnistämään järjestelmää uudelleen, koska käyttäjät on siirrettävä kirjautumisluokkaan, kun se on aiemmin määritetty. Muokkaa /etc/login.conf-tiedostoa, tässä tiedostossa sinun täytyy muokata oletuskirjautumisluokkaa, tuoda se lomakkeeseen:

default:
        :passwd_format=sha512:
        :copyright=/etc/COPYRIGHT:
        :welcome=/etc/motd:
        :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:
        :path=/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin ~/bin:
        :nologin=/var/run/nologin:
        :cputime=unlimited:
        :datasize=unlimited:
        :stacksize=unlimited:
        :memorylocked=64K:
        :memoryuse=unlimited:
        :filesize=unlimited:
        :coredumpsize=unlimited:
        :openfiles=unlimited:
        :maxproc=unlimited:
        :sbsize=unlimited:
        :vmemoryuse=unlimited:
        :swapuse=unlimited:
        :pseudoterminals=unlimited:
        :kqueues=unlimited:
        :umtxp=unlimited:
        :priority=0:
        :ignoretime@:
        :umask=022:
        :label=mls/equal:

Rivi :label=mls/equal sallii tämän luokan jäsenten käyttäjille pääsyn tiedostoihin, jotka on merkitty millä tahansa tunnisteella (mls/low, mls/high). Näiden manipulointien jälkeen sinun on rakennettava tietokanta uudelleen ja asetettava pääkäyttäjä (ja ne, jotka sitä tarvitsevat) tähän kirjautumisluokkaan:

cap_mkdb /etc/login.conf
pw usermod root -L default

Jotta käytäntö koskee vain tiedostoja, sinun on muokattava /etc/mac.conf-tiedostoa jättämällä siihen vain yksi rivi:

default_labels file ?mls

Sinun on myös lisättävä mac_mls.ko-moduuli automaattiseen käynnistykseen:

echo 'mac_mls_load="YES"' >> /boot/loader.conf

Tämän jälkeen voit turvallisesti käynnistää järjestelmän uudelleen. Kuinka luoda vankila Voit lukea sen yhdestä julkaisustani. Mutta ennen kuin luot vankilan, sinun on lisättävä kiintolevy ja luotava sille tiedostojärjestelmä ja otettava käyttöön siinä multilabel, luotava ufs2-tiedostojärjestelmä, jonka klusterin koko on 64 kt:

newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1

Kun olet luonut tiedostojärjestelmän ja lisännyt multilabelin, sinun on lisättävä kiintolevy tiedostoon /etc/fstab, lisää rivi tähän tiedostoon:

/dev/ada1               /jail  ufs     rw              0       1

Määritä Mountpointissa hakemisto, johon aiot asentaa kiintolevyn; Passissa muista määrittää 1 (missä järjestyksessä tämä kiintolevy tarkistetaan) - tämä on välttämätöntä, koska ufs-tiedostojärjestelmä on herkkä äkillisille sähkökatkoille . Asenna levy näiden vaiheiden jälkeen:

mount /dev/ada1 /jail

Asenna vankila tähän hakemistoon. Kun vankila on suoritettu, sinun on tehtävä siinä samat käsittelyt kuin pääjärjestelmässä käyttäjille ja tiedostoille /etc/login.conf, /etc/mac.conf.

säätö

Ennen tarvittavien tunnisteiden asentamista suosittelen kaikkien tarvittavien pakettien asentamista; minun tapauksessani tagit asetetaan ottaen huomioon nämä paketit:

mod_php73-7.3.4_1              PHP Scripting Language
php73-7.3.4_1                  PHP Scripting Language
php73-ctype-7.3.4_1            The ctype shared extension for php
php73-curl-7.3.4_1             The curl shared extension for php
php73-dom-7.3.4_1              The dom shared extension for php
php73-extensions-1.0           "meta-port" to install PHP extensions
php73-filter-7.3.4_1           The filter shared extension for php
php73-gd-7.3.4_1               The gd shared extension for php
php73-gettext-7.3.4_1          The gettext shared extension for php
php73-hash-7.3.4_1             The hash shared extension for php
php73-iconv-7.3.4_1            The iconv shared extension for php
php73-json-7.3.4_1             The json shared extension for php
php73-mysqli-7.3.4_1           The mysqli shared extension for php
php73-opcache-7.3.4_1          The opcache shared extension for php
php73-openssl-7.3.4_1          The openssl shared extension for php
php73-pdo-7.3.4_1              The pdo shared extension for php
php73-pdo_sqlite-7.3.4_1       The pdo_sqlite shared extension for php
php73-phar-7.3.4_1             The phar shared extension for php
php73-posix-7.3.4_1            The posix shared extension for php
php73-session-7.3.4_1          The session shared extension for php
php73-simplexml-7.3.4_1        The simplexml shared extension for php
php73-sqlite3-7.3.4_1          The sqlite3 shared extension for php
php73-tokenizer-7.3.4_1        The tokenizer shared extension for php
php73-xml-7.3.4_1              The xml shared extension for php
php73-xmlreader-7.3.4_1        The xmlreader shared extension for php
php73-xmlrpc-7.3.4_1           The xmlrpc shared extension for php
php73-xmlwriter-7.3.4_1        The xmlwriter shared extension for php
php73-xsl-7.3.4_1              The xsl shared extension for php
php73-zip-7.3.4_1              The zip shared extension for php
php73-zlib-7.3.4_1             The zlib shared extension for php
apache24-2.4.39 

Tässä esimerkissä tarrat asetetaan ottaen huomioon näiden pakettien riippuvuudet. Tietysti voit tehdä sen yksinkertaisemmin: aseta /usr/local/lib-kansiolle ja tässä hakemistossa oleville tiedostoille mls/low-tunnisteet ja myöhemmät asennetut paketit (esimerkiksi php:n lisälaajennukset) voivat käyttää tämän hakemiston kirjastot, mutta mielestäni on parempi antaa pääsy vain tarpeellisiin tiedostoihin. Lopeta vankila ja aseta mls/high-tunnisteet kaikille tiedostoille:

setfmac -R mls/high /jail

Kun asetat merkkejä, prosessi pysähtyy, jos setfmac kohtaa kovia linkkejä, esimerkissäni poistin kovia linkkejä seuraavista hakemistoista:

/var/db/etcupdate/current/
/var/db/etcupdate/current/etc
/var/db/etcupdate/current/usr/share/openssl/man/en.ISO8859-15
/var/db/etcupdate/current/usr/share/man/en.ISO8859-15
/var/db/etcupdate/current/usr/share/man/en.UTF-8
/var/db/etcupdate/current/usr/share/nls
/etc/ssl
/usr/local/etc
/usr/local/etc/fonts/conf.d
/usr/local/openssl

Kun tarrat on asetettu, sinun on asetettava mls/low-tunnisteet apachelle. Ensimmäinen asia, joka sinun on tehtävä, on selvittää, mitä tiedostoja tarvitaan apachen käynnistämiseen:

ldd /usr/local/sbin/httpd

Tämän komennon suorittamisen jälkeen riippuvuudet näkyvät näytöllä, mutta tarvittavien nimikkeiden asettaminen näille tiedostoille ei riitä, koska hakemistoissa, joissa nämä tiedostot sijaitsevat, on mls/high-tunniste, joten myös nämä hakemistot on nimettävä ml/alhainen. Käynnistettäessä apache tulostaa myös sen suorittamiseen tarvittavat tiedostot, ja php:lle nämä riippuvuudet löytyvät httpd-error.log-lokista.

setfmac mls/low /
setfmac mls/low /usr/local/lib/libpcre.so.1
setfmac mls/low /usr/local/lib/libaprutil-1.so.0
setfmac mls/low /usr/local/lib/libdb-5.3.so.0
setfmac mls/low /usr/local/lib/libgdbm.so.6
setfmac mls/low /usr/local/lib/libexpat.so.1
setfmac mls/low /usr/local/lib/libapr-1.so.0
setfmac mls/low /lib/libcrypt.so.5
setfmac mls/low /lib/libthr.so.3
setfmac mls/low /lib/libc.so.7
setfmac mls/low /usr/local/lib/libintl.so.8
setfmac mls/low /var
setfmac mls/low /var/run
setfmac mls/low /var/log
setfmac mls/low /var/log/httpd-access.log
setfmac mls/low /var/log/httpd-error.log
setfmac mls/low /var/run/httpd.pid
setfmac mls/low /lib
setfmac mls/low /lib/libcrypt.so.5
setfmac mls/low /usr/local/lib/db5/libdb-5.3.so.0
setfmac mls/low /usr/local/lib/db5/libdb-5.3.so.0.0.0
setfmac mls/low /usr/local/lib/db5
setfmac mls/low /usr/local/lib
setfmac mls/low /libexec
setfmac mls/low /libexec/ld-elf.so.1
setfmac  mls/low /dev
setfmac  mls/low /dev/random
setfmac  mls/low /usr/local/libexec
setfmac  mls/low /usr/local/libexec/apache24
setfmac  mls/low /usr/local/libexec/apache24/*
setfmac  mls/low /etc/pwd.db
setfmac  mls/low /etc/passwd
setfmac  mls/low /etc/group
setfmac  mls/low /etc/
setfmac  mls/low /usr/local/etc
setfmac -R mls/low /usr/local/etc/apache24
setfmac mls/low /usr
setfmac mls/low /usr/local
setfmac mls/low /usr/local/sbin
setfmac mls/low /usr/local/sbin/*
setfmac -R mls/low /usr/local/etc/rc.d/
setfmac mls/low /usr/local/sbin/htcacheclean
setfmac mls/low /var/log/httpd-access.log
setfmac mls/low /var/log/httpd-error.log
setfmac -R mls/low /usr/local/www
setfmac mls/low /usr/lib
setfmac mls/low /tmp
setfmac -R mls/low /usr/local/lib/php
setfmac -R mls/low /usr/local/etc/php
setfmac mls/low /usr/local/etc/php.conf
setfmac mls/low /lib/libelf.so.2
setfmac mls/low /lib/libm.so.5
setfmac mls/low /usr/local/lib/libxml2.so.2
setfmac mls/low /lib/libz.so.6
setfmac mls/low /usr/lib/liblzma.so.5
setfmac mls/low /usr/local/lib/libiconv.so.2
setfmac mls/low /usr/lib/librt.so.1
setfmac mls/low /lib/libthr.so.3
setfmac mls/low /usr/local/lib/libpng16.so.16
setfmac mls/low /usr/lib/libbz2.so.4
setfmac mls/low /usr/local/lib/libargon2.so.0
setfmac mls/low /usr/local/lib/libpcre2-8.so.0
setfmac mls/low /usr/local/lib/libsqlite3.so.0
setfmac mls/low /usr/local/lib/libgd.so.6
setfmac mls/low /usr/local/lib/libjpeg.so.8
setfmac mls/low /usr/local/lib/libfreetype.so
setfmac mls/low /usr/local/lib/libfontconfig.so.1
setfmac mls/low /usr/local/lib/libtiff.so.5
setfmac mls/low /usr/local/lib/libwebp.so.7
setfmac mls/low /usr/local/lib/libjbig.so.2
setfmac mls/low /usr/lib/libssl.so.8
setfmac mls/low /lib/libcrypto.so.8
setfmac mls/low /usr/local/lib/libzip.so.5
setfmac mls/low /etc/resolv.conf

Tämä luettelo sisältää mls/low-tunnisteet kaikille tiedostoille, jotka ovat välttämättömiä apache- ja php-yhdistelmän oikean toiminnan kannalta (niille paketeille, jotka on asennettu esimerkissäni).

Viimeinen silaus on määrittää vankila toimimaan mls/equal-tasolla ja apache mls/low-tasolla. Aloitaksesi jail, sinun on tehtävä muutoksia /etc/rc.d/jail-skriptiin, etsittävä jail_start-funktiot tästä skriptistä, muutettava komentomuuttuja muotoon:

command="setpmac mls/equal $jail_program"

Komento setpmac ajaa suoritettavan tiedoston vaaditulla ominaisuustasolla, tässä tapauksessa mls/equal, päästäkseen käsiksi kaikkiin tarroihin. Apachessa sinun on muokattava käynnistyskomentosarjaa /usr/local/etc/rc.d/apache24. Muuta apache24_prestart-funktiota:

apache24_prestart() {
        apache24_checkfib
        apache24_precmd
        eval "setpmac mls/low" ${command} ${apache24_flags}
}

В virallinen Käsikirja sisältää toisen esimerkin, mutta en voinut käyttää sitä, koska sain jatkuvasti ilmoituksen, että setpmac-komentoa ei voida käyttää.

johtopäätös

Tämä pääsynjakotapa lisää lisäturvaa apachelle (vaikka tämä menetelmä sopii kaikille muille pinoille), joka lisäksi toimii vankilassa, samalla kun järjestelmänvalvojalle kaikki tämä tapahtuu läpinäkyvästi ja huomaamattomasti.

Luettelo lähteistä, jotka auttoivat minua tämän julkaisun kirjoittamisessa:

https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/mac.html

Lähde: will.com

Lisää kommentti