Kötelező jogterjesztési modell a FreeBSD-ben

Bevezetés

A szerverbiztonság további szintjének biztosításához használhatja mandátummodell hozzáférés elosztása. Ez a kiadvány leírja, hogyan futtathatja az apache-t börtönben, csak azokhoz az összetevőkhöz férve hozzá, amelyekhez hozzáférés szükséges az apache és a php megfelelő működéséhez. Ezzel az elvvel nemcsak az Apache-t korlátozhatja, hanem bármely más veremet is.

Edzés

Ez a módszer csak az ufs fájlrendszerhez alkalmas, ebben a példában a fő rendszerben a zfs, a börtönben pedig az ufs lesz használatos. Az első lépés a kernel újraépítése, a FreeBSD telepítésekor pedig a forráskódot.
A rendszer telepítése után szerkessze a fájlt:

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

Csak egy sort kell hozzáadnia ehhez a fájlhoz:

options     MAC_MLS

Az mls/high címke domináns pozícióba kerül az mls/low címkével szemben, az mls/low címkével induló alkalmazások nem fognak tudni hozzáférni az mls/high címkével ellátott fájlokhoz. További részletek a FreeBSD rendszerben elérhető összes címkéről itt találhatók vezetés.
Ezután lépjen a /usr/src könyvtárba:

cd /usr/src

A kernel felépítésének megkezdéséhez futtassa (a j billentyűben adja meg a magok számát a rendszerben):

make -j 4 buildkernel KERNCONF=GENERIC

A kernel lefordítása után telepíteni kell:

make installkernel KERNCONF=GENERIC

A kernel telepítése után ne rohanjon a rendszer újraindításával, mivel a felhasználókat át kell vinni a bejelentkezési osztályba, miután korábban konfigurálta. Szerkessze az /etc/login.conf fájlt, ebben a fájlban módosítani kell az alapértelmezett bejelentkezési osztályt, hozzuk az űrlapba:

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:

A :label=mls/equal sor lehetővé teszi azon felhasználók számára, akik ennek az osztálynak a tagjai, hogy hozzáférjenek a tetszőleges címkével (mls/low, mls/high) megjelölt fájlokhoz. Ezen manipulációk után újra kell építeni az adatbázist, és el kell helyeznie a root felhasználót (valamint azokat, akiknek szüksége van rá) ebbe a bejelentkezési osztályba:

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

Annak érdekében, hogy a házirend csak a fájlokra vonatkozzon, szerkesztenie kell az /etc/mac.conf fájlt, és csak egy sort kell hagynia benne:

default_labels file ?mls

A mac_mls.ko modult is hozzá kell adnia az automatikus futtatáshoz:

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

Ezt követően biztonságosan újraindíthatja a rendszert. Hogyan kell létrehozni börtön Egyik kiadványomban olvashatod. De mielőtt létrehozna egy börtönt, hozzá kell adnia egy merevlemezt, és létre kell hoznia rajta egy fájlrendszert, és engedélyeznie kell rajta a többcímkét, létre kell hoznia egy ufs2 fájlrendszert 64 kb fürtmérettel:

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

A fájlrendszer létrehozása és a többcímke hozzáadása után hozzá kell adnia a merevlemezt az /etc/fstab fájlhoz, és hozzá kell adnia a sort ehhez a fájlhoz:

/dev/ada1               /jail  ufs     rw              0       1

A csatlakozási pontban adja meg azt a könyvtárat, amelybe a merevlemezt csatlakoztatni fogja; a Pass-ban feltétlenül adjon meg 1-et (milyen sorrendben kerül ellenőrzésre a merevlemez) - ez azért szükséges, mert az ufs fájlrendszer érzékeny a hirtelen áramszünetekre . A következő lépések után csatlakoztassa a lemezt:

mount /dev/ada1 /jail

Telepítse a jail-t ebbe a könyvtárba. A jail lefutása után ugyanazokat a manipulációkat kell végrehajtania benne, mint a fő rendszerben a felhasználókkal és az /etc/login.conf, /etc/mac.conf fájlokkal.

beállítás

A szükséges címkék telepítése előtt javaslom az összes szükséges csomag telepítését, esetemben a címkék beállítása ezen csomagok figyelembevételével történik:

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 

Ebben a példában a címkék beállítása ezen csomagok függőségeit figyelembe véve történik. Természetesen egyszerűbben is megteheti: a /usr/local/lib mappához és az ebben a könyvtárban található fájlok esetén állítsa be az mls/low címkéket, és a később telepített csomagok (például a php további kiterjesztései) hozzáférhetnek az ebben a könyvtárban található könyvtárakat, de jobbnak tűnik számomra, ha csak a szükséges fájlokhoz biztosítok hozzáférést. Állítsa le a börtönt, és állítson be mls/high címkéket az összes fájlra:

setfmac -R mls/high /jail

A jelölések beállításakor a folyamat leáll, ha a setfmac kemény hivatkozásokkal találkozik, a példámban a következő könyvtárakban töröltem a kemény hivatkozásokat:

/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

A címkék beállítása után be kell állítania az mls/low címkéket az apache számára, először meg kell találnia, hogy milyen fájlok szükségesek az apache indításához:

ldd /usr/local/sbin/httpd

A parancs végrehajtása után a függőségek megjelennek a képernyőn, de ezeken a fájlokon nem lesz elegendő a szükséges címkék beállítása, mivel azok a könyvtárak, amelyekben ezek a fájlok találhatók, az mls/high címkével rendelkeznek, ezért ezeket a könyvtárakat is fel kell címkézni. mls/alacsony. Indításkor az apache a futtatásához szükséges fájlokat is kiadja, és php esetén ezek a függőségek a httpd-error.log naplóban találhatók.

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

Ez a lista mls/low címkéket tartalmaz minden olyan fájlhoz, amely az apache és php kombináció megfelelő működéséhez szükséges (a példámban telepített csomagokhoz).

Az utolsó simítás az lesz, hogy beállítjuk a jail-t, hogy az mls/egyenlő szinten fusson, az apache-t pedig az mls/low szinten. A jail elindításához módosítania kell az /etc/rc.d/jail szkriptet, meg kell keresnie a jail_start függvényeket ebben a szkriptben, és módosítania kell a parancsváltozót a következőre:

command="setpmac mls/equal $jail_program"

A setpmac parancs futtatja a végrehajtható fájlt a szükséges képességszinten, ebben az esetben az mls/equal, hogy hozzáférjen az összes címkéhez. Az apache-ban szerkeszteni kell az /usr/local/etc/rc.d/apache24 indítószkriptet. Módosítsa az apache24_prestart függvényt:

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

В hivatalos A kézikönyv tartalmaz egy másik példát is, de nem tudtam használni, mert folyamatosan kaptam egy üzenetet, hogy nem tudom használni a setpmac parancsot.

Teljesítmény

A hozzáférés elosztásának ez a módja további biztonsági szintet ad az apache-hoz (bár ez a módszer bármilyen más veremhez is alkalmas), amely ráadásul börtönben is fut, ugyanakkor a rendszergazda számára mindez átláthatóan és észrevétlenül történik.

Azon források listája, amelyek segítettek a kiadvány megírásában:

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

Forrás: will.com

Hozzászólás