Obligatoresch Rechter Verdeelung Modell am FreeBSD

Aféierung

Fir en zousätzleche Niveau vun der Serversécherheet ze bidden, kënnt Dir benotzen Mandat Modell Zougang Verdeelung. Dës Verëffentlechung wäert beschreiwen wéi Dir Apache an engem Prisong lafe kënnt mat Zougang nëmmen zu deene Komponenten déi Zougang fir Apache a PHP erfuerderen fir richteg ze schaffen. Mat dësem Prinzip kënnt Dir net nëmmen Apache limitéieren, awer och all aner Stack.

Virbereedung

Dës Method ass nëmme gëeegent fir den ufs Dateiesystem; an dësem Beispill gëtt zfs am Haaptsystem benotzt, respektiv ufs am Prisong. Den éischte Schrëtt ass de Kernel nei opzebauen; wann Dir FreeBSD installéiert, installéiert de Quellcode.
Nodeems de System installéiert ass, ännert d'Datei:

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

Dir musst nëmmen eng Zeil op dës Datei addéieren:

options     MAC_MLS

Den mls / héich Label wäert eng dominant Positioun iwwer den mls / niddereg Label hunn, Uwendungen déi mam mls / niddereg Label lancéiert ginn, kënnen net Zougang zu Dateien kréien déi den mls / héich Label hunn. Méi Detailer iwwer all verfügbar Tags am FreeBSD System kënnen an dësem fonnt ginn Féierung.
Als nächst gitt op den /usr/src Verzeichnis:

cd /usr/src

Fir unzefänken de Kärel ze bauen, lafen (am j Schlëssel, spezifizéiert d'Zuel vun de Kären am System):

make -j 4 buildkernel KERNCONF=GENERIC

Nodeems de Kernel kompiléiert ass, muss et installéiert ginn:

make installkernel KERNCONF=GENERIC

Nodeems Dir de Kernel installéiert hutt, presséiert net de System nei ze starten, well et néideg ass d'Benotzer an d'Loginklass ze transferéieren, nodeems se se virdru konfiguréiert hunn. Ännert d'Datei /etc/login.conf, an dëser Datei musst Dir d'Standard Login Klass änneren, bréngt se op d'Form:

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:

D'Linn :label=mls/equal erlaabt de Benotzer, déi Member vun dëser Klass sinn, Zougang zu Dateien ze kréien, déi mat all Label markéiert sinn (mls/low, mls/high). No dëse Manipulatioune musst Dir d'Datebank nei opbauen an de Root Benotzer (wéi och déi, déi et brauchen) an dëser Login Klass setzen:

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

Fir datt d'Politik nëmmen op Dateien gëlt, musst Dir d'Datei /etc/mac.conf änneren, nëmmen eng Zeil dran hannerloossen:

default_labels file ?mls

Dir musst och de mac_mls.ko Modul fir Autorun addéieren:

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

Duerno kënnt Dir de System sécher nei starten. Wéi ze schafen Gefängnis Dir kënnt et an enger vu menge Publikatiounen liesen. Awer ier Dir e Prisong erstellt, musst Dir eng Festplack addéieren an e Dateiesystem drop erstellen an et Multilabel aktivéieren, en ufs2 Dateisystem erstellen mat enger Clustergréisst vu 64kb:

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

Nodeems Dir de Dateiesystem erstallt hutt a Multilabel bäigefüügt hutt, musst Dir d'Harddisk op /etc/fstab addéieren, d'Linn op dës Datei addéieren:

/dev/ada1               /jail  ufs     rw              0       1

Am Mountpoint, spezifizéiert de Verzeechnes an deem Dir d'Harddisk montéiert; am Pass, gitt sécher 1 ze spezifizéieren (a wéi enger Sequenz dës Festplack iwwerpréift gëtt) - dat ass néideg, well den ufs Dateisystem sensibel ass fir plötzlech Stroumschnëtt . No dëse Schrëtt, montéiert den Disk:

mount /dev/ada1 /jail

Installéiert de Prisong an dësem Verzeichnis. Nodeems de Prisong leeft, musst Dir déiselwecht Manipulatioune maachen wéi am Haaptsystem mat Benotzer an de Dateien /etc/login.conf, /etc/mac.conf.

Upassung

Ier Dir déi néideg Tags installéiert, empfeelen ech Iech all déi néideg Packagen z'installéieren; a mengem Fall ginn d'Tags festgeluecht andeems Dir dës Packagen berücksichtegt:

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 

An dësem Beispill ginn Etiketten agestallt andeems d'Ofhängegkeete vun dëse Packagen berücksichtegt ginn. Natierlech kënnt Dir et méi einfach maachen: fir den /usr/local/lib Dossier an d'Dateien an dësem Verzeichnis, setze d'mls/low Etiketten a spéider installéiert Packagen (zum Beispill zousätzlech Extensiounen fir php) kënnen Zougang d'Bibliothéiken an dësem Verzeichnis, awer et schéngt mir besser nëmmen Zougang zu deenen Dateien ze bidden déi néideg sinn. Stop Prisong a setzt mls / héich Etiketten op all Dateien:

setfmac -R mls/high /jail

Wann Dir Marke setzt, gëtt de Prozess gestoppt wann setfmac schwéier Linken opstinn, a mengem Beispill hunn ech schwéier Linken an de folgende Verzeichnisser geläscht:

/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

Nodeems d'Etiketten agestallt goufen, musst Dir d'mls / Low Etiketten fir Apache setzen, dat éischt wat Dir maache musst ass erauszefannen wéi eng Dateie gebraucht ginn fir Apache ze starten:

ldd /usr/local/sbin/httpd

Nom Ausféierung vun dësem Kommando ginn Ofhängegkeeten um Bildschierm ugewisen, awer déi néideg Etiketten op dës Dateien ze setzen ass net genuch, well d'Verzeichnisser an deenen dës Dateie sinn den mls/high Label hunn, sou datt dës Verzeichnisser och markéiert musse ginn mls / niddereg. Wann Dir ufänkt, wäert Apache och d'Dateien ausginn, déi néideg sinn fir se ze lafen, a fir php kënnen dës Ofhängegkeeten am httpd-error.log Log fonnt ginn.

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

Dës Lëscht enthält mls / Low Tags fir all Dateien déi néideg sinn fir déi richteg Operatioun vun der Apache a PHP Kombinatioun (fir déi Packagen déi a mengem Beispill installéiert sinn).

De finalen Touch ass de Prisong ze konfiguréieren fir um mls / gläiche Niveau ze lafen, an Apache um mls / nidderegen Niveau. Fir de Prisong ze starten, musst Dir Ännerungen am /etc/rc.d/jail Skript maachen, d'Jail_start Funktiounen an dësem Skript fannen, d'Kommandovariabel op d'Form änneren:

command="setpmac mls/equal $jail_program"

De setpmac Kommando leeft déi ausführbar Datei um erfuerderleche Kapazitéitsniveau, an dësem Fall mls/gläich, fir Zougang zu all Etiketten ze hunn. An Apache musst Dir de Startup-Skript änneren /usr/local/etc/rc.d/apache24. Ännert d'apache24_prestart Funktioun:

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

В offiziell D'Handbuch enthält en anert Beispill, awer ech konnt et net benotzen, well ech ëmmer e Message iwwer d'Onméiglechkeet fir de setpmac Kommando ze benotzen.

Konklusioun

Dës Method fir den Zougang ze verdeelen wäert en zousätzleche Sécherheetsniveau fir Apache bäidroen (obwuel dës Method fir all aner Stack gëeegent ass), deen zousätzlech an engem Prisong leeft, zur selwechter Zäit fir den Administrateur all dëst wäert transparent an onmerkbar geschéien.

Lëscht vu Quellen déi mir gehollef hunn dës Publikatioun ze schreiwen:

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

Source: will.com

Setzt e Commentaire