Modeli i shpërndarjes së të drejtave të detyrueshme në FreeBSD

Paraqitje

Për të siguruar një nivel shtesë të sigurisë së serverit, mund të përdorni modeli i mandatit shpërndarja e aksesit. Ky publikim do të përshkruajë se si mund të ekzekutoni apache në një burg me akses vetëm në ato komponentë që kërkojnë qasje që apache dhe php të funksionojnë siç duhet. Duke përdorur këtë parim, ju mund të kufizoni jo vetëm Apache, por edhe çdo pirg tjetër.

Trajnimi

Kjo metodë është e përshtatshme vetëm për sistemin e skedarëve ufs; në këtë shembull, zfs do të përdoret në sistemin kryesor, dhe ufs në burg, përkatësisht. Hapi i parë është rindërtimi i kernelit; kur instaloni FreeBSD, instaloni kodin burimor.
Pasi të instalohet sistemi, modifikoni skedarin:

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

Ju duhet të shtoni vetëm një rresht në këtë skedar:

options     MAC_MLS

Etiketa mls/high do të ketë një pozicion dominues mbi etiketën mls/low, aplikacionet që do të lançohen me etiketën mls/low nuk do të kenë qasje në skedarët që kanë etiketën mls/high. Më shumë detaje rreth të gjitha etiketave të disponueshme në sistemin FreeBSD mund të gjenden në këtë udhëheqja.
Tjetra, shkoni te drejtoria /usr/src:

cd /usr/src

Për të filluar ndërtimin e kernelit, ekzekutoni (në tastin j, specifikoni numrin e bërthamave në sistem):

make -j 4 buildkernel KERNCONF=GENERIC

Pasi të jetë përpiluar kerneli, ai duhet të instalohet:

make installkernel KERNCONF=GENERIC

Pas instalimit të kernelit, mos nxitoni të rindizni sistemin, pasi është e nevojshme të transferoni përdoruesit në klasën e hyrjes, pasi e keni konfiguruar më parë. Ndryshoni skedarin /etc/login.conf, në këtë skedar ju duhet të redaktoni klasën e paracaktuar të hyrjes, sillni atë në formën:

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:

Rreshti :label=mls/equal do t'i lejojë përdoruesit që janë anëtarë të kësaj klase të aksesojnë skedarët që janë të shënuar me çdo etiketë (mls/low, mls/high). Pas këtyre manipulimeve, duhet të rindërtoni bazën e të dhënave dhe të vendosni përdoruesin rrënjë (si dhe ata që kanë nevojë) në këtë klasë të hyrjes:

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

Në mënyrë që politika të zbatohet vetëm për skedarët, duhet të redaktoni skedarin /etc/mac.conf, duke lënë vetëm një rresht në të:

default_labels file ?mls

Ju gjithashtu duhet të shtoni modulin mac_mls.ko në autorun:

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

Pas kësaj, ju mund të rindizni me siguri sistemin. Si të krijoni burg Mund ta lexoni në një nga botimet e mia. Por përpara se të krijoni një burg, duhet të shtoni një hard disk dhe të krijoni një sistem skedari në të dhe të aktivizoni multilabel në të, të krijoni një sistem skedari ufs2 me një madhësi grupi prej 64 kb:

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

Pas krijimit të sistemit të skedarëve dhe shtimit të multilabel, duhet të shtoni hard diskun në /etc/fstab, shtoni rreshtin në këtë skedar:

/dev/ada1               /jail  ufs     rw              0       1

Në Mountpoint, specifikoni drejtorinë në të cilën do të montoni hard diskun; në Pass, sigurohuni që të specifikoni 1 (në çfarë sekuence do të kontrollohet ky hard disk) - kjo është e nevojshme, pasi sistemi i skedarëve ufs është i ndjeshëm ndaj ndërprerjeve të papritura të energjisë . Pas këtyre hapave, montoni diskun:

mount /dev/ada1 /jail

Instaloni jail në këtë direktori. Pasi të funksionojë burgu, duhet të bëni të njëjtat manipulime në të si në sistemin kryesor me përdoruesit dhe skedarët /etc/login.conf, /etc/mac.conf.

rregullim

Para se të instaloni etiketat e nevojshme, unë rekomandoj instalimin e të gjitha paketave të nevojshme; në rastin tim, etiketat do të vendosen duke marrë parasysh këto paketa:

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 

Në këtë shembull, etiketat do të vendosen duke marrë parasysh varësitë e këtyre paketave. Sigurisht, mund ta bëni më thjeshtë: për dosjen /usr/local/lib dhe skedarët e vendosur në këtë direktori, vendosni etiketat mls/low dhe paketat e instaluara pasuese (për shembull, shtesat shtesë për php) do të jenë në gjendje të aksesojnë bibliotekat në këtë direktori, por më duket më mirë të siguroj qasje vetëm në ato skedarë që janë të nevojshëm. Ndaloni burgun dhe vendosni etiketat mls/high në të gjithë skedarët:

setfmac -R mls/high /jail

Kur vendosni shenja, procesi do të ndalet nëse setfmac ndeshet me lidhje të forta, në shembullin tim fshiva lidhjet e vështira në drejtoritë e mëposhtme:

/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

Pasi të jenë vendosur etiketat, duhet të vendosni etiketat mls/low për apache, gjëja e parë që duhet të bëni është të zbuloni se cilat skedarë nevojiten për të nisur apache:

ldd /usr/local/sbin/httpd

Pas ekzekutimit të kësaj komande, në ekran do të shfaqen varësitë, por vendosja e etiketave të nevojshme në këta skedarë nuk do të mjaftojë, pasi drejtoritë në të cilat ndodhen këta skedarë kanë etiketën mls/high, kështu që edhe këto direktori duhet të etiketohen. mls/të ulët. Kur fillon, apache do të nxjerrë gjithashtu skedarët që janë të nevojshëm për ta ekzekutuar atë, dhe për php këto varësi mund të gjenden në regjistrin 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

Kjo listë përmban etiketat mls/low për të gjithë skedarët që janë të nevojshëm për funksionimin e saktë të kombinimit apache dhe php (për ato paketa që janë instaluar në shembullin tim).

Prekja e fundit do të jetë konfigurimi i burgut që të funksionojë në nivelin mls/të barabartë dhe apache në nivelin mls/të ulët. Për të nisur burgun, duhet të bëni ndryshime në skriptin /etc/rc.d/jail, të gjeni funksionet jail_start në këtë skript, të ndryshoni variablin e komandës në formën:

command="setpmac mls/equal $jail_program"

Komanda setpmac ekzekuton skedarin e ekzekutueshëm në nivelin e kërkuar të aftësisë, në këtë rast mls/equal, në mënyrë që të ketë akses në të gjitha etiketat. Në apache ju duhet të redaktoni skriptin e fillimit /usr/local/etc/rc.d/apache24. Ndryshoni funksionin apache24_prestart:

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

В zyrtar Manuali përmban një shembull tjetër, por nuk munda ta përdorja sepse vazhdimisht merrja një mesazh për pamundësinë për të përdorur komandën setpmac.

Prodhim

Kjo metodë e shpërndarjes së aksesit do t'i shtojë një nivel shtesë sigurie apache-s (edhe pse kjo metodë është e përshtatshme për çdo stack tjetër), i cili përveç kësaj funksionon në burg, në të njëjtën kohë, për administratorin e gjithë kjo do të ndodhë në mënyrë transparente dhe pa u vënë re.

Lista e burimeve që më ndihmuan në shkrimin e këtij botimi:

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

Burimi: www.habr.com

Shto një koment