Mandate model for the distribution of rights in FreeBSD

Sissejuhatus

Serveri täiendava turvataseme tagamiseks võib kasutada volitatud mudelit juurdepääsu jaotust. Käesolevas publikatsioonis kirjeldatakse, kuidas saab käivitada apache'i vanglas, millel on juurdepääs ainult neile komponentidele, mis on vajalikud apache'i ja php korrektselt toimimiseks. Selle põhimõttega saab piirata mitte ainult apache'i, vaid ka igasuguseid muid kogumeid.

Ettevalmistus

See meetod sobib ainult ufs-failisüsteemile, antud näites kasutatakse põhissüsteemis zfs-i ja vanglas vastavalt ufs-i. Kõigepealt tuleb kerneli taas koostada, FreeBSD installimise ajal installige lähtekood.
Pärast süsteemi installimist redigeerige faili:

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

Sellesse faili tuleb lisada ainult üks rida:

options     MAC_MLS

Märge mls/high omab domineerivat positsiooni märge mls/low üle, rakendused, mis käivitatakse mls/low märgiga, ei saa juurdepääsu failidele, millel on mls/high märge. Täiendava teabe saamiseks kõikide süsteemis FreeBSD saadaval olevate märgete kohta võib lugeda sellest juhendist.
Seejärel minge katalooge /usr/src:

cd /usr/src

Kerneli koostamise käivitamiseks käivitage (võtmes j määrake süsteemis olevate tuumade arv):

make -j 4 buildkernel KERNCONF=GENERIC

Pärast kärgede kokkupanekut peate selle installima:

make installkernel KERNCONF=GENERIC

Pärast kärgede installimist ärge kiirustage süsteemi taaskäivitama, sest peate kasutajad viima sisselogimisklassidesse, eelnevalt neid seadistades. Redigeerige faili /etc/login.conf, kus peate redigeerima sisselogimisklassi default, tuues selle järgmisse vormi:

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:

Rida :label=mls/equal, võimaldab kasutajatel, kes kuuluvad sellesse klassi, pääseda ligi failidele, mis on märgitud mis tahes etiketiga (mls/low, mls/high). Pärast neid manipuleerimisi tuleb andmebaas ümber ehitada ja kasutaja root (ning ka need, kellel seda on vaja) peab olema sellesse sisenemise klassi lisatud:

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

Et poliitika puudutaks ainult faile, tuleb redigeerida fail /etc/mac.conf, jättes sinna vaid ühe rida:

default_labels file ?mls

Samuti tuleb lisada moodul mac_mls.ko automaatkäivitusse:

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

Pärast seda võib julgelt süsteemi taaskäivitada. Kuidas luua jail saate lugeda ühes mu postitustes. Kuid enne jaili loomist on vajalik lisada kõvaketas ja luua sellele failisüsteem, samuti aktiveerida multilabel; looge failisüsteem ufs2, mille klastrite suurus on 64kb:

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

Pärast failisüsteemi loomist ja multilabeli lisamist tuleb kõvaketas lisada /etc/fstab, lisage see rida sellesse faili:

/dev/ada1               /jail  ufs     rw              0       1

Mountpoint'i puhul märkige kaust, kuhu monteerite kõvaketta, ja Pass'i puhul märkige kindlasti 1 (kuidas kontrollitakse seda kõvaketast) — see on vajalik, kuna failisüsteem ufs on tundlik järskude elektri katkestuste suhtes. Pärast neid toiminguid monteerige ketas:

mount /dev/ada1 /jail

Installige jail sellele kaustale. Kui jail töötab, tuleb seal teha samad toimingud, mis põhissüsteemis kasutajate ja failidega /etc/login.conf, /etc/mac.conf.

Seadistamine

Enne vajalike märkide seadistamist soovitan installida kõik vajalikud paketid, minu juhul seadistatakse märkid vastavalt nendele paketidele:

mod_php73-7.3.4_1              PHP skriptimiske keel
php73-7.3.4_1                  PHP skriptimiske keel
php73-ctype-7.3.4_1            ctype jagatud laiendus php jaoks
php73-curl-7.3.4_1             curl jagatud laiendus php jaoks
php73-dom-7.3.4_1              dom jagatud laiendus php jaoks
php73-extensions-1.0           "meta-port" PHP laiendite installimiseks
php73-filter-7.3.4_1           filter jagatud laiendus php jaoks
php73-gd-7.3.4_1               gd jagatud laiendus php jaoks
php73-gettext-7.3.4_1          gettext jagatud laiendus php jaoks
php73-hash-7.3.4_1             hash jagatud laiendus php jaoks
php73-iconv-7.3.4_1            iconv jagatud laiendus php jaoks
php73-json-7.3.4_1             json jagatud laiendus php jaoks
php73-mysqli-7.3.4_1           mysqli jagatud laiendus php jaoks
php73-opcache-7.3.4_1          opcache jagatud laiendus php jaoks
php73-openssl-7.3.4_1          openssl jagatud laiendus php jaoks
php73-pdo-7.3.4_1              pdo jagatud laiendus php jaoks
php73-pdo_sqlite-7.3.4_1       pdo_sqlite jagatud laiendus php jaoks
php73-phar-7.3.4_1             phar jagatud laiendus php jaoks
php73-posix-7.3.4_1            posix jagatud laiendus php jaoks
php73-session-7.3.4_1          sessioon jagatud laiendus php jaoks
php73-simplexml-7.3.4_1        simplexml jagatud laiendus php jaoks
php73-sqlite3-7.3.4_1          sqlite3 jagatud laiendus php jaoks
php73-tokenizer-7.3.4_1        tokenizer jagatud laiendus php jaoks
php73-xml-7.3.4_1              xml jagatud laiendus php jaoks
php73-xmlreader-7.3.4_1        xmlreader jagatud laiendus php jaoks
php73-xmlrpc-7.3.4_1           xmlrpc jagatud laiendus php jaoks
php73-xmlwriter-7.3.4_1        xmlwriter jagatud laiendus php jaoks
php73-xsl-7.3.4_1              xsl jagatud laiendus php jaoks
php73-zip-7.3.4_1              zip jagatud laiendus php jaoks
php73-zlib-7.3.4_1             zlib jagatud laiendus php jaoks
apache24-2.4.39 

Antud näites määratakse märgid andmepakettide sõltuvusi arvestades. Muidugi on lihtsam seada märke kaustale /usr/local/lib ja selle katalooge kuuluvatele failidele mls/low, mistõttu saavad hiljem installitud paketid (näiteks PHP täiendused) sellele kaustale juurdepääsu, kuid arvan, et oleks parem anda juurdepääs ainult vajalikutele failidele. Peatage jail ja määrake kõikidele failidele mls/high märgid:

setfmac -R mls/high /jail

Märkide määramisel peatub protsess, kui setfmac kohtab kõvasid linke; minu näites kustutasin kõvad lingid järgmistest kataloogidest:

/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

Pärast märkide määramist on vajalik määrata apache'ile mls/low märgid; kõigepealt tuleb välja selgitada, milliseid faile apache'i käivitamiseks vajalik:

ldd /usr/local/sbin/httpd

Pärast selle käsu täitmist kuvatakse ekraanil sõltuvused, kuid nendele failidele vajalike märgiste seadmine ei ole piisav, kuna kataloogid, kus need failid asuvad, omavad märgist mls/high. Seetõttu tuleb ka nendele kataloogidele seadistada märgis mls/low. Apache'i käivitamisel kuvatakse ka failid, mis on vajalikud selle käivitamiseks, ja PHP sõltuvused saab teada httpd-error.log logifailist.

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

Selles loendis kuvatakse mls/low sildid kõigi failide jaoks, mis on vajalikud apache ja php sidumise korrektseks toimimiseks (kõigi pakettide jaoks, mis on minu näites installitud).

Viimase sammuna seadistatakse jaili käivitamine tasemel mls/equal ja apache tasemel mls/low. Jaili käivitamiseks tuleb teha muudatusi skriptis /etc/rc.d/jail, leidke antud skriptis funktsioon jail_start, muuda muutujat command järgmiseks:

command="setpmac mls/equal $jail_program"

Käsk setpmac käivitab täitmisfaili vajalikul mandaattasemel, antud juhul mls/equal, et pääseda ligi kõigile siltidele. Apache'is tuleb redigeerida käivitusskripti /usr/local/etc/rc.d/apache24. Tehke muudatus funktsioonis apache24_prestart:

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

V ametlikult Käsiraamatus on teine näide, kuid ma ei suutnud seda kasutada, kuna sain pidevalt teate, et käsku setpmac ei saa kasutada.

Kokkuvõte

See sellele juurdepääsu jaotuse meetodile lisatakse apache'ile täiendav turvakiht (kuigi see sobib ka igale teisele tehnoloogiapakkumisele), mis käivitatakse samal ajal jail'is, jääb administraatorile kogu see protsess läbipaistvaks ja märkamatuks.

Allikate loetelu, mis aitasid mul selle publikatsiooni kirjutamisel:

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

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster