Ferplichte rjochtenferdielingsmodel yn FreeBSD

Ynlieding

Om in ekstra nivo fan serverfeiligens te leverjen, kinne jo gebrûk meitsje mandaat model tagong distribúsje. Dizze publikaasje sil beskriuwe hoe't jo apache kinne útfiere yn in finzenis mei tagong allinich ta dy komponinten dy't tagong hawwe foar apache en php om goed te wurkjen. Mei dit prinsipe kinne jo net allinich Apache beheine, mar ek elke oare stapel.

Tarieding fan

Dizze metoade is allinich geskikt foar it ufs-bestânsysteem; yn dit foarbyld sille zfs respektivelik wurde brûkt yn it haadsysteem, en ufs yn 'e finzenis. De earste stap is om de kernel opnij op te bouwen; by it ynstallearjen fan FreeBSD, ynstallearje de boarnekoade.
Nei it systeem is ynstalleare, bewurkje it bestân:

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

Jo hoege mar ien rigel ta te foegjen oan dit bestân:

options     MAC_MLS

It mls/hege-label sil in dominante posysje hawwe oer it mls/low-label, applikaasjes dy't lansearre wurde mei it mls/low-label sille gjin tagong krije ta bestannen dy't it mls/hege label hawwe. Mear details oer alle beskikbere tags yn it FreeBSD-systeem binne hjir te finen liederskip.
Gean dan nei de map /usr/src:

cd /usr/src

Om te begjinnen mei it bouwen fan de kernel, rinne (yn 'e j-kaai, spesifisearje it oantal kearnen yn it systeem):

make -j 4 buildkernel KERNCONF=GENERIC

Nei't de kernel kompilearre is, moat it ynstalleare wurde:

make installkernel KERNCONF=GENERIC

Nei it ynstallearjen fan de kernel, haast net om it systeem opnij te begjinnen, om't it nedich is om brûkers oer te setten nei de oanmeldklasse, nei't it earder konfigureare is. Bewurkje it bestân /etc/login.conf, yn dit bestân moatte jo de standert oanmeldklasse bewurkje, bring it nei it formulier:

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:

De rigel :label=mls/equal lit brûkers dy't lid binne fan dizze klasse tagong krije ta bestannen dy't markearre binne mei elk label (mls/low, mls/high). Nei dizze manipulaasjes moatte jo de databank opnij opbouwe en de root-brûker (lykas dejingen dy't it nedich hawwe) yn dizze oanmeldklasse pleatse:

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

Om it belied allinich foar bestannen fan tapassing te meitsjen, moatte jo it /etc/mac.conf-bestân bewurkje, wêrtroch mar ien rigel yn bliuwt:

default_labels file ?mls

Jo moatte ek de mac_mls.ko-module taheakje foar autorun:

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

Hjirnei kinne jo it systeem feilich opnij starte. Hoe te meitsjen finzenskip Jo kinne it lêze yn ien fan myn publikaasjes. Mar foardat jo in finzenis meitsje, moatte jo in hurde skiif tafoegje en in bestânsysteem derop oanmeitsje en multilabel derop ynskeakelje, in ufs2-bestânsysteem meitsje mei in klustergrutte fan 64kb:

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

Nei it oanmeitsjen fan it bestânsysteem en it tafoegjen fan multilabel, moatte jo de hurde skiif tafoegje oan /etc/fstab, foegje de rigel ta oan dit bestân:

/dev/ada1               /jail  ufs     rw              0       1

Spesifisearje yn Mountpoint de map wêryn jo de hurde skiif sille montearje; yn Pass, wês wis dat jo 1 opjaan (yn hokker folchoarder dizze hurde skiif sil wurde kontrolearre) - dit is nedich, om't it ufs-bestânsysteem gefoelich is foar hommelse stroomûnderbrekkingen . Nei dizze stappen, montearje de skiif:

mount /dev/ada1 /jail

Ynstallearje finzenis yn dizze map. Neidat de finzenis rint, moatte jo deselde manipulaasjes dwaan as yn it haadsysteem mei brûkers en de triemmen /etc/login.conf, /etc/mac.conf.

oanpassing

Foardat jo de nedige tags ynstallearje, advisearje ik alle nedige pakketten te ynstallearjen; yn myn gefal sille de tags wurde ynsteld mei rekkening mei dizze pakketten:

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 dit foarbyld sille labels wurde ynsteld mei rekkening mei de ôfhinklikens fan dizze pakketten. Fansels kinne jo it ienfâldiger dwaan: foar de map /usr/local/lib en de bestannen yn dizze map, set de mls/low-labels yn en de folgjende ynstalleare pakketten (bygelyks ekstra tafoegings foar php) kinne tagong krije de biblioteken yn dizze map, mar it liket my better te jaan tagong allinnich oan dy triemmen dy't nedich binne. Stopje finzenis en set mls / hege labels op alle bestannen:

setfmac -R mls/high /jail

By it ynstellen fan marken sil it proses wurde stoppe as setfmac hurde keppelings tsjinkomt, yn myn foarbyld haw ik hurde keppelings wiske yn 'e folgjende mappen:

/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

Neidat de labels binne ynsteld, moatte jo de mls / lege labels foar apache ynstelle, it earste ding dat jo moatte dwaan is út te finen hokker bestannen nedich binne om apache te begjinnen:

ldd /usr/local/sbin/httpd

Nei it útfieren fan dit kommando sille ôfhinklikens op it skerm werjûn wurde, mar it ynstellen fan de nedige labels op dizze triemmen sil net genôch wêze, om't de mappen wêryn dizze triemmen lizze it label mls/high, dus dizze mappen moatte ek markearre wurde mls/low. By it starten sil apache ek de bestannen útfiere dy't nedich binne om it út te fieren, en foar php kinne dizze ôfhinklikens fûn wurde yn it 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

Dizze list befettet mls/low-tags foar alle bestannen dy't nedich binne foar de juste wurking fan 'e apache- en php-kombinaasje (foar dy pakketten dy't yn myn foarbyld binne ynstalleare).

De lêste touch sil wêze om finzenis te konfigurearjen om te rinnen op it mls / lykweardich nivo, en apache op it mls / leech nivo. Om finzenis te begjinnen, moatte jo wizigingen meitsje oan it /etc/rc.d/jail-skript, fine de jail_start-funksjes yn dit skript, feroarje de kommando-fariabele nei it formulier:

command="setpmac mls/equal $jail_program"

It kommando setpmac rint it útfierbere bestân op it fereaske kapasiteitsnivo, yn dit gefal mls/equal, om tagong te krijen ta alle labels. Yn apache moatte jo it opstartskript bewurkje /usr/local/etc/rc.d/apache24. Feroarje de apache24_prestart-funksje:

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

В offisjeel De hantlieding befettet in oar foarbyld, mar ik koe it net brûke, om't ik hieltyd in berjocht krige oer it ûnfermogen om it setpmac-kommando te brûken.

konklúzje

Dizze metoade foar it fersprieden fan tagong sil in ekstra nivo fan feiligens tafoegje oan apache (hoewol't dizze metoade geskikt is foar elke oare stapel), dy't boppedat yn in finzenis rint, tagelyk, foar de behearder sil dit alles transparant en unmerkber barre.

List fan boarnen dy't my holpen by it skriuwen fan dizze publikaasje:

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

Boarne: www.habr.com

Add a comment