Verpligte regte verspreidingsmodel in FreeBSD

Inleiding

Om 'n bykomende vlak van bedienersekuriteit te bied, kan u gebruik mandaat model toegang verspreiding. Hierdie publikasie sal beskryf hoe jy apache in 'n tronk kan laat loop met slegs toegang tot daardie komponente wat toegang benodig vir apache en php om korrek te werk. Deur hierdie beginsel te gebruik, kan jy nie net Apache beperk nie, maar ook enige ander stapel.

Opleiding

Hierdie metode is slegs geskik vir die ufs-lêerstelsel; in hierdie voorbeeld sal zfs onderskeidelik in die hoofstelsel en ufs in die tronk gebruik word. Die eerste stap is om die kern te herbou; wanneer jy FreeBSD installeer, installeer die bronkode.
Nadat die stelsel geïnstalleer is, wysig die lêer:

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

Jy hoef net een reël by hierdie lêer te voeg:

options     MAC_MLS

Die mls/hoog-etiket sal 'n dominante posisie oor die mls/laag-etiket hê, toepassings wat met die mls/laag-etiket geloods sal word, sal nie toegang tot lêers wat die mls/hoog-etiket het, kan kry nie. Meer besonderhede oor alle beskikbare etikette in die FreeBSD-stelsel kan hierin gevind word leierskap.
Gaan dan na die /usr/src-gids:

cd /usr/src

Om die kern te begin bou, hardloop (spesifiseer die aantal kerns in die stelsel in die j-sleutel):

make -j 4 buildkernel KERNCONF=GENERIC

Nadat die kern saamgestel is, moet dit geïnstalleer word:

make installkernel KERNCONF=GENERIC

Nadat u die kern geïnstalleer het, moenie haastig wees om die stelsel te herlaai nie, aangesien dit nodig is om gebruikers na die aanmeldklas oor te dra, nadat dit voorheen gekonfigureer is. Wysig die /etc/login.conf lêer, in hierdie lêer moet jy die verstek aanmeldklas wysig, bring dit na die vorm:

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:

Die reël :label=mls/equal sal gebruikers wat lede van hierdie klas is, toegang gee tot lêers wat met enige etiket gemerk is (mls/low, mls/high). Na hierdie manipulasies moet jy die databasis herbou en die wortelgebruiker (sowel as diegene wat dit nodig het) in hierdie aanmeldklas plaas:

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

Om die beleid slegs op lêers van toepassing te maak, moet jy die /etc/mac.conf-lêer wysig en net een reël daarin laat:

default_labels file ?mls

Jy moet ook die mac_mls.ko-module byvoeg om outomaties te hardloop:

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

Hierna kan u die stelsel veilig herlaai. Hoe om te skep die tronk Jy kan dit in een van my publikasies lees. Maar voordat u 'n tronk skep, moet u 'n hardeskyf byvoeg en 'n lêerstelsel daarop skep en multi-etiket daarop aktiveer, 'n ufs2-lêerstelsel met 'n groepgrootte van 64kb skep:

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

Nadat u die lêerstelsel geskep het en multi-etiket bygevoeg het, moet u die hardeskyf by /etc/fstab voeg, voeg die reël by hierdie lêer:

/dev/ada1               /jail  ufs     rw              0       1

In Mountpoint, spesifiseer die gids waarin jy die hardeskyf sal monteer; in Pass, maak seker dat jy 1 spesifiseer (in watter volgorde hierdie hardeskyf nagegaan sal word) - dit is nodig, aangesien die ufs-lêerstelsel sensitief is vir skielike kragonderbrekings . Na hierdie stappe, monteer die skyf:

mount /dev/ada1 /jail

Installeer tronk in hierdie gids. Nadat die tronk aan die gang is, moet jy dieselfde manipulasies daarin doen as in die hoofstelsel met gebruikers en die lêers /etc/login.conf, /etc/mac.conf.

aanpassing

Voordat u die nodige etikette installeer, beveel ek aan dat u al die nodige pakkette installeer; in my geval sal die etikette ingestel word met inagneming van hierdie pakkette:

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 

In hierdie voorbeeld sal etikette gestel word met inagneming van die afhanklikhede van hierdie pakkette. Natuurlik kan jy dit eenvoudiger doen: vir die /usr/local/lib-lêergids en die lêers wat in hierdie gids geleë is, stel die mls/low-etikette en daaropvolgende geïnstalleerde pakkette (byvoorbeeld addisionele uitbreidings vir php) sal toegang hê die biblioteke in hierdie gids, maar dit lyk vir my beter om net toegang te gee tot die lêers wat nodig is. Stop tronk en stel mls/hoë etikette op alle lêers:

setfmac -R mls/high /jail

Wanneer punte opgestel word, sal die proses gestop word as setfmac harde skakels teëkom, in my voorbeeld het ek harde skakels in die volgende gidse uitgevee:

/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

Nadat die etikette ingestel is, moet jy die mls/low etikette vir apache stel, die eerste ding wat jy moet doen is om uit te vind watter lêers nodig is om apache te begin:

ldd /usr/local/sbin/httpd

Nadat hierdie opdrag uitgevoer is, sal afhanklikhede op die skerm vertoon word, maar die opstel van die nodige etikette op hierdie lêers sal nie genoeg wees nie, aangesien die gidse waarin hierdie lêers geleë is die mls/high-etiket het, dus moet hierdie dopgehou ook gemerk word mls/laag. Wanneer dit begin, sal apache ook die lêers uitvoer wat nodig is om dit uit te voer, en vir php kan hierdie afhanklikhede gevind word in die 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

Hierdie lys bevat mls/low tags vir alle lêers wat nodig is vir die korrekte werking van die apache en php kombinasie (vir daardie pakkette wat in my voorbeeld geïnstalleer is).

Die finale aanraking sal wees om die tronk op te stel om op die mls/gelyke vlak te loop, en apache op die mls/lae vlak. Om tronk te begin, moet jy veranderinge aan die /etc/rc.d/jail script maak, vind die jail_start funksies in hierdie script, verander die opdrag veranderlike na die vorm:

command="setpmac mls/equal $jail_program"

Die setpmac-opdrag laat die uitvoerbare lêer op die vereiste vermoëvlak, in hierdie geval mls/equal, hardloop om toegang tot alle etikette te hê. In Apache moet jy die opstartskrip /usr/local/etc/rc.d/apache24 wysig. Verander die apache24_prestart-funksie:

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

В amptelik Die handleiding bevat nog 'n voorbeeld, maar ek kon dit nie gebruik nie, want ek het voortdurend 'n boodskap gekry oor die onvermoë om die setpmac-opdrag te gebruik.

Output

Hierdie metode om toegang te versprei sal 'n bykomende vlak van sekuriteit by Apache voeg (alhoewel hierdie metode geskik is vir enige ander stapel), wat boonop terselfdertyd in 'n tronk loop, vir die administrateur sal dit alles deursigtig en onopvallend gebeur.

Lys van bronne wat my gehelp het om hierdie publikasie te skryf:

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

Bron: will.com

Voeg 'n opmerking