Lögboðið réttindadreifingarlíkan í FreeBSD

Inngangur

Til að veita aukið öryggisstig netþjóns geturðu notað umboðsmódel aðgangsdreifingu. Þetta rit mun lýsa því hvernig þú getur keyrt apache í fangelsi með aðeins aðgang að þeim hlutum sem þurfa aðgang til að apache og php virki rétt. Með því að nota þessa reglu geturðu takmarkað ekki aðeins Apache heldur einnig hvaða annan stafla sem er.

Þjálfun

Þessi aðferð hentar aðeins fyrir ufs skráarkerfið; í þessu dæmi verður zfs notað í aðalkerfinu og ufs í fangelsinu. Fyrsta skrefið er að endurbyggja kjarnann; þegar þú setur upp FreeBSD skaltu setja upp frumkóðann.
Eftir að kerfið hefur verið sett upp skaltu breyta skránni:

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

Þú þarft aðeins að bæta einni línu við þessa skrá:

options     MAC_MLS

mls/hátt merki mun hafa yfirburðastöðu yfir mls/lágt merki, forrit sem verða opnuð með mls/lágt merki munu ekki geta nálgast skrár sem hafa mls/hátt merki. Frekari upplýsingar um öll tiltæk merki í FreeBSD kerfinu er að finna í þessu leiðarvísir.
Næst skaltu fara í /usr/src möppuna:

cd /usr/src

Til að byrja að byggja kjarnann skaltu keyra (í j lyklinum, tilgreindu fjölda kjarna í kerfinu):

make -j 4 buildkernel KERNCONF=GENERIC

Eftir að kjarninn hefur verið settur saman verður að setja hann upp:

make installkernel KERNCONF=GENERIC

Eftir að kjarnann hefur verið settur upp skaltu ekki flýta þér að endurræsa kerfið, þar sem það er nauðsynlegt að flytja notendur yfir í innskráningarflokkinn, eftir að hafa stillt hann áður. Breyttu /etc/login.conf skránni, í þessari skrá þarftu að breyta sjálfgefna innskráningarflokknum, færðu það á formið:

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:

Línan :label=mls/equal mun leyfa notendum sem eru meðlimir í þessum flokki að fá aðgang að skrám sem eru merktar með hvaða merki sem er (mls/low, mls/high). Eftir þessar aðgerðir þarftu að endurbyggja gagnagrunninn og setja rótarnotandann (sem og þá sem þurfa á honum að halda) í þennan innskráningarflokk:

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

Til þess að stefnan eigi aðeins við um skrár þarftu að breyta /etc/mac.conf skránni og skilja aðeins eftir eina línu í henni:

default_labels file ?mls

Þú þarft líka að bæta við mac_mls.ko einingunni til að keyra sjálfvirkt:

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

Eftir þetta geturðu örugglega endurræst kerfið. Hvernig á að búa til fangelsi Þú getur lesið það í einu af ritunum mínum. En áður en þú býrð til fangelsi þarftu að bæta við harða diskinum og búa til skráarkerfi á hann og virkja fjölmerki á því, búa til ufs2 skráarkerfi með klasastærð 64kb:

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

Eftir að hafa búið til skráarkerfið og bætt við fjölmerki þarftu að bæta harða disknum við /etc/fstab, bæta línunni við þessa skrá:

/dev/ada1               /jail  ufs     rw              0       1

Í Mountpoint, tilgreindu möppuna þar sem þú munt setja harða diskinn upp; í Pass, vertu viss um að tilgreina 1 (í hvaða röð þessi harði diskur verður athugaður) - þetta er nauðsynlegt, þar sem ufs skráarkerfið er viðkvæmt fyrir skyndilegum rafmagnsleysi . Eftir þessi skref skaltu tengja diskinn:

mount /dev/ada1 /jail

Settu upp fangelsi í þessari möppu. Eftir að fangelsið er í gangi þarftu að gera sömu aðgerðirnar í því og í aðalkerfinu með notendur og skrárnar /etc/login.conf, /etc/mac.conf.

aðlögun

Áður en þú setur upp nauðsynleg merki mæli ég með því að setja upp alla nauðsynlega pakka; í mínu tilfelli verða merkin stillt með hliðsjón af þessum pakka:

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 

Í þessu dæmi verða merki sett með hliðsjón af ósjálfstæði þessara pakka. Auðvitað geturðu gert það einfaldara: fyrir /usr/local/lib möppuna og skrárnar sem eru staðsettar í þessari möppu, stilltu mls/low merkimiðana og síðari uppsettir pakkar (til dæmis viðbótarviðbætur fyrir php) munu fá aðgang að söfnin í þessari möppu, en mér finnst betra að veita aðeins aðgang að þeim skrám sem eru nauðsynlegar. Stöðvaðu fangelsi og stilltu mls/high labels á allar skrár:

setfmac -R mls/high /jail

Þegar merkingar eru settar verður ferlið stöðvað ef setfmac rekst á harða hlekki, í mínu dæmi eyddi ég hörðum hlekkjum í eftirfarandi möppum:

/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

Eftir að merkimiðarnir hafa verið stilltir þarftu að stilla mls/low merki fyrir apache, það fyrsta sem þú þarft að gera er að finna út hvaða skrár þarf til að ræsa apache:

ldd /usr/local/sbin/httpd

Eftir að þessi skipun hefur verið keyrð munu ósjálfstæði birtast á skjánum, en það er ekki nóg að setja nauðsynlega merkimiða á þessar skrár, þar sem möppurnar sem þessar skrár eru í eru með mls/high merki, þannig að þessar möppur þurfa líka að vera merktar mls/lágt. Þegar byrjað er mun apache einnig gefa út þær skrár sem eru nauðsynlegar til að keyra það, og fyrir php er hægt að finna þessar ósjálfstæði í httpd-error.log log.

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

Þessi listi inniheldur mls/low tags fyrir allar skrár sem eru nauðsynlegar fyrir rétta virkni apache og php samsetningarinnar (fyrir þá pakka sem eru settir upp í dæminu mínu).

Síðasta snertingin verður að stilla fangelsi til að keyra á mls/jafnvægi og apache á mls/lágmarki. Til að hefja fangelsi þarftu að gera breytingar á /etc/rc.d/jail forskriftinni, finna jail_start aðgerðirnar í þessu handriti, breyta skipanabreytunni í formið:

command="setpmac mls/equal $jail_program"

Setpmac skipunin keyrir keyrsluskrána á tilskildu getustigi, í þessu tilviki mls/equal, til að hafa aðgang að öllum merkimiðum. Í apache þarftu að breyta ræsiforritinu /usr/local/etc/rc.d/apache24. Breyttu apache24_prestart aðgerðinni:

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

В embættismaður Handbókin inniheldur annað dæmi, en ég gat ekki notað það vegna þess að ég fékk sífellt skilaboð um vanhæfni til að nota setpmac skipunina.

Output

Þessi aðferð til að dreifa aðgangi mun bæta auknu öryggisstigi við apache (þó að þessi aðferð henti öllum öðrum stafla), sem að auki keyrir í fangelsi, á sama tíma, fyrir stjórnandann mun allt þetta gerast gagnsætt og óséður.

Listi yfir heimildir sem hjálpuðu mér við að skrifa þetta rit:

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

Heimild: www.habr.com

Bæta við athugasemd