Model dosbarthu hawliau gorfodol yn FreeBSD

Cyflwyniad

I ddarparu lefel ychwanegol o ddiogelwch gweinydd, gallwch ddefnyddio model mandad dosbarthiad mynediad. Bydd y cyhoeddiad hwn yn disgrifio sut y gallwch chi redeg apache mewn carchar gyda mynediad yn unig i'r cydrannau hynny sydd angen mynediad er mwyn i apache a php weithio'n gywir. Gan ddefnyddio'r egwyddor hon, gallwch gyfyngu nid yn unig Apache, ond hefyd unrhyw stac arall.

Hyfforddiant

Mae'r dull hwn yn addas ar gyfer system ffeiliau ufs yn unig; yn yr enghraifft hon, bydd zfs yn cael ei ddefnyddio yn y brif system, ac ufs yn y carchar, yn y drefn honno. Y cam cyntaf yw ailadeiladu'r cnewyllyn; wrth osod FreeBSD, gosodwch y cod ffynhonnell.
Ar ôl gosod y system, golygwch y ffeil:

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

Dim ond un llinell sydd angen i chi ei hychwanegu at y ffeil hon:

options     MAC_MLS

Bydd gan y label mls/uchel safle dominyddol dros y label mls/isel, ni fydd rhaglenni a fydd yn cael eu lansio gyda'r label mls/isel yn gallu cyrchu ffeiliau sydd â'r label mls/uchel. Ceir rhagor o fanylion am yr holl dagiau sydd ar gael yn y system FreeBSD yn hwn arweinyddiaeth.
Nesaf, ewch i'r cyfeiriadur / usr/src:

cd /usr/src

I ddechrau adeiladu'r cnewyllyn, rhedwch (yn yr allwedd j, nodwch nifer y creiddiau yn y system):

make -j 4 buildkernel KERNCONF=GENERIC

Ar ôl i'r cnewyllyn gael ei lunio, rhaid ei osod:

make installkernel KERNCONF=GENERIC

Ar ôl gosod y cnewyllyn, peidiwch â rhuthro i ailgychwyn y system, gan fod angen trosglwyddo defnyddwyr i'r dosbarth mewngofnodi, ar ôl ei ffurfweddu o'r blaen. Golygu'r ffeil /etc/login.conf, yn y ffeil hon mae angen i chi olygu'r dosbarth mewngofnodi diofyn, dod ag ef i'r ffurflen:

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:

Bydd y llinell :label=mls/equal yn galluogi defnyddwyr sy'n aelodau o'r dosbarth hwn i gyrchu ffeiliau sydd wedi'u marcio ag unrhyw label (mls/isel, mls/uchel). Ar ôl y triniaethau hyn, mae angen i chi ailadeiladu'r gronfa ddata a gosod y defnyddiwr gwraidd (yn ogystal â'r rhai sydd ei angen) yn y dosbarth mewngofnodi hwn:

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

Er mwyn i'r polisi fod yn berthnasol i ffeiliau yn unig, mae angen i chi olygu'r ffeil /etc/mac.conf, gan adael dim ond un llinell ynddi:

default_labels file ?mls

Mae angen i chi hefyd ychwanegu'r modiwl mac_mls.ko at autorun:

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

Ar ôl hyn, gallwch chi ailgychwyn y system yn ddiogel. Sut i greu carchar Gallwch ei ddarllen yn un o fy nghyhoeddiadau. Ond cyn creu carchar, mae angen i chi ychwanegu gyriant caled a chreu system ffeiliau arno a galluogi multilabel arno, creu system ffeiliau ufs2 gyda maint clwstwr o 64kb:

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

Ar ôl creu'r system ffeiliau ac ychwanegu multilabel, mae angen i chi ychwanegu'r gyriant caled i /etc/fstab, ychwanegwch y llinell at y ffeil hon:

/dev/ada1               /jail  ufs     rw              0       1

Yn Mountpoint, nodwch y cyfeiriadur y byddwch yn gosod y gyriant caled ynddo; yn Pass, gwnewch yn siŵr eich bod yn nodi 1 (ym mha drefn y bydd y gyriant caled hwn yn cael ei wirio) - mae hyn yn angenrheidiol, gan fod system ffeiliau ufs yn sensitif i doriadau pŵer sydyn . Ar ôl y camau hyn, gosodwch y ddisg:

mount /dev/ada1 /jail

Gosod carchar yn y cyfeiriadur hwn. Ar ôl i'r carchar redeg, mae angen i chi wneud yr un triniaethau ynddo ag yn y brif system gyda defnyddwyr a'r ffeiliau /etc/login.conf, /etc/mac.conf.

addasiad

Cyn gosod y tagiau angenrheidiol, rwy'n argymell gosod yr holl becynnau angenrheidiol; yn fy achos i, gosodir y tagiau gan ystyried y pecynnau hyn:

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 

Yn yr enghraifft hon, bydd labeli'n cael eu gosod gan ystyried dibyniaethau'r pecynnau hyn. Wrth gwrs, gallwch chi ei wneud yn symlach: ar gyfer y ffolder / usr / local / lib a'r ffeiliau sydd wedi'u lleoli yn y cyfeiriadur hwn, gosodwch y mls / labeli isel a bydd pecynnau gosod dilynol (er enghraifft, estyniadau ychwanegol ar gyfer php) yn gallu cyrchu y llyfrgelloedd yn y cyfeiriadur hwn, ond mae'n ymddangos yn well i mi ddarparu mynediad yn unig i'r ffeiliau hynny sy'n angenrheidiol. Stopiwch y carchar a gosodwch mls/labeli uchel ar bob ffeil:

setfmac -R mls/high /jail

Wrth osod marciau, bydd y broses yn cael ei hatal os bydd setfmac yn dod ar draws dolenni caled, yn fy enghraifft fe wnes i ddileu dolenni caled yn y cyfeiriaduron canlynol:

/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

Ar ôl i'r labeli gael eu gosod, mae angen i chi osod y mls / labeli isel ar gyfer apache, y peth cyntaf y mae angen i chi ei wneud yw darganfod pa ffeiliau sydd eu hangen i ddechrau apache:

ldd /usr/local/sbin/httpd

Ar ôl gweithredu'r gorchymyn hwn, bydd dibyniaethau'n cael eu harddangos ar y sgrin, ond ni fydd gosod y labeli angenrheidiol ar y ffeiliau hyn yn ddigon, gan fod y cyfeiriaduron y lleolir y ffeiliau hyn ynddynt â'r label mls/uchel, felly mae angen labelu'r cyfeiriaduron hyn hefyd mls/isel. Wrth ddechrau, bydd apache hefyd yn allbynnu'r ffeiliau sy'n angenrheidiol i'w redeg, ac ar gyfer php gellir dod o hyd i'r dibyniaethau hyn yn y log httpd-error.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

Mae'r rhestr hon yn cynnwys mls / tagiau isel ar gyfer yr holl ffeiliau sy'n angenrheidiol ar gyfer gweithrediad cywir y cyfuniad apache a php (ar gyfer y pecynnau hynny sydd wedi'u gosod yn fy enghraifft).

Y cyffyrddiad olaf fydd ffurfweddu'r carchar i redeg ar y lefel mls/cyfartal, ac apache ar y lefel mls/isel. I ddechrau carchar, mae angen i chi wneud newidiadau i'r sgript /etc/rc.d/jail, dod o hyd i'r swyddogaethau jail_start yn y sgript hon, newid y newidyn gorchymyn i'r ffurflen:

command="setpmac mls/equal $jail_program"

Mae'r gorchymyn setpmac yn rhedeg y ffeil gweithredadwy ar y lefel gallu gofynnol, yn yr achos hwn mls/equal, er mwyn cael mynediad i bob label. Mewn apache mae angen i chi olygu'r sgript cychwyn /usr/local/etc/rc.d/apache24. Newidiwch y swyddogaeth apache24_prestart:

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

В swyddogol Mae'r llawlyfr yn cynnwys enghraifft arall, ond nid oeddwn yn gallu ei ddefnyddio oherwydd fy mod yn dal i gael neges am yr anallu i ddefnyddio'r gorchymyn setpmac.

Allbwn

Bydd y dull hwn o ddosbarthu mynediad yn ychwanegu lefel ychwanegol o ddiogelwch i apache (er bod y dull hwn yn addas ar gyfer unrhyw stac arall), sydd hefyd yn rhedeg yn y carchar, ar yr un pryd, i'r gweinyddwr, bydd hyn i gyd yn digwydd yn dryloyw ac yn ddisylw.

Rhestr o ffynonellau a helpodd fi wrth ysgrifennu’r cyhoeddiad hwn:

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

Ffynhonnell: hab.com

Ychwanegu sylw