Verplicht distributiemodel voor rechten in FreeBSD

Introductie

Om een ​​extra niveau van serverbeveiliging te bieden, kunt u gebruiken mandaatmodel toegang tot distributie. Deze publicatie beschrijft hoe je apache in een gevangenis kunt draaien met alleen toegang tot die componenten die toegang nodig hebben om apache en php correct te laten werken. Met dit principe kun je niet alleen Apache beperken, maar ook elke andere stapel.

Opleiding

Deze methode is alleen geschikt voor het ufs-bestandssysteem; in dit voorbeeld wordt respectievelijk zfs in het hoofdsysteem en ufs in de gevangenis gebruikt. De eerste stap is het opnieuw opbouwen van de kernel; bij het installeren van FreeBSD installeert u de broncode.
Nadat het systeem is geïnstalleerd, bewerkt u het bestand:

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

U hoeft slechts één regel aan dit bestand toe te voegen:

options     MAC_MLS

Het mls/high label zal een dominante positie hebben over het mls/low label, applicaties die gelanceerd zullen worden met het mls/low label zullen geen toegang hebben tot bestanden die het mls/high label hebben. Meer details over alle beschikbare tags in het FreeBSD-systeem kunt u hierin vinden leiderschap.
Ga vervolgens naar de map /usr/src:

cd /usr/src

Om te beginnen met het bouwen van de kernel, voer je uit (specificeer in de j-toets het aantal kernen in het systeem):

make -j 4 buildkernel KERNCONF=GENERIC

Nadat de kernel is gecompileerd, moet deze worden geïnstalleerd:

make installkernel KERNCONF=GENERIC

Na het installeren van de kernel, haast u niet om het systeem opnieuw op te starten, omdat het nodig is om gebruikers over te zetten naar de login-klasse, nadat ze deze eerder hebben geconfigureerd. Bewerk het bestand /etc/login.conf, in dit bestand moet u de standaard login-klasse bewerken, breng deze naar het 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 regel :label=mls/equal geeft gebruikers die lid zijn van deze klasse toegang tot bestanden die zijn gemarkeerd met een willekeurig label (mls/low, mls/high). Na deze manipulaties moet u de database opnieuw opbouwen en de rootgebruiker (evenals degenen die deze nodig hebben) in deze inlogklasse plaatsen:

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

Om ervoor te zorgen dat het beleid alleen op bestanden wordt toegepast, moet je het bestand /etc/mac.conf bewerken en er slechts één regel in laten staan:

default_labels file ?mls

Je moet ook de mac_mls.ko-module toevoegen aan autorun:

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

Hierna kunt u het systeem veilig opnieuw opstarten. Hoe maak je gevangenis Je kunt het lezen in een van mijn publicaties. Maar voordat u een gevangenis aanmaakt, moet u een harde schijf toevoegen en er een bestandssysteem op maken en multilabel erop inschakelen, een ufs2-bestandssysteem maken met een clustergrootte van 64 kb:

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

Na het aanmaken van het bestandssysteem en het toevoegen van multilabel, moet je de harde schijf toevoegen aan /etc/fstab, voeg de regel toe aan dit bestand:

/dev/ada1               /jail  ufs     rw              0       1

Geef in Mountpoint de map op waarin u de harde schijf gaat mounten; zorg ervoor dat u in Pass 1 opgeeft (in welke volgorde deze harde schijf wordt gecontroleerd) - dit is nodig omdat het ufs-bestandssysteem gevoelig is voor plotselinge stroomuitval . Na deze stappen koppelt u de schijf:

mount /dev/ada1 /jail

Installeer jail in deze map. Nadat de jail draait, moet je daarin dezelfde manipulaties uitvoeren als in het hoofdsysteem met gebruikers en de bestanden /etc/login.conf, /etc/mac.conf.

afstelling

Voordat ik de benodigde tags installeer, raad ik aan om alle benodigde pakketten te installeren; in mijn geval zullen de tags worden ingesteld rekening houdend met deze 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 

In dit voorbeeld worden labels ingesteld, rekening houdend met de afhankelijkheden van deze pakketten. Natuurlijk kunt u het eenvoudiger doen: voor de map /usr/local/lib en de bestanden in deze map stelt u de mls/low-labels in, zodat daaropvolgende geïnstalleerde pakketten (bijvoorbeeld extra extensies voor php) toegang kunnen krijgen de bibliotheken in deze map, maar het lijkt mij beter om alleen toegang te geven tot de bestanden die nodig zijn. Stop de gevangenis en stel mls/high-labels in voor alle bestanden:

setfmac -R mls/high /jail

Bij het instellen van markeringen wordt het proces gestopt als setfmac harde links tegenkomt, in mijn voorbeeld heb ik harde links in de volgende mappen verwijderd:

/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 de labels zijn ingesteld, moet u de mls/low-labels voor apache instellen. Het eerste wat u hoeft te doen is uitzoeken welke bestanden nodig zijn om apache te starten:

ldd /usr/local/sbin/httpd

Na het uitvoeren van dit commando worden de afhankelijkheden op het scherm weergegeven, maar het instellen van de benodigde labels op deze bestanden is niet voldoende, aangezien de mappen waarin deze bestanden zich bevinden het label mls/high hebben, dus deze mappen moeten ook worden gelabeld ml/laag. Bij het starten zal apache ook de bestanden uitvoeren die nodig zijn om het uit te voeren, en voor php zijn deze afhankelijkheden te vinden in het 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

Deze lijst bevat mls/low-tags voor alle bestanden die nodig zijn voor de juiste werking van de apache- en php-combinatie (voor de pakketten die in mijn voorbeeld zijn geïnstalleerd).

De laatste hand zal zijn om de jail zo te configureren dat deze op het mls/equal-niveau draait, en apache op het mls/low-niveau. Om jail te starten, moet je wijzigingen aanbrengen in het script /etc/rc.d/jail, de jail_start-functies in dit script zoeken en de opdrachtvariabele in de vorm wijzigen:

command="setpmac mls/equal $jail_program"

De opdracht setpmac voert het uitvoerbare bestand uit op het vereiste capaciteitsniveau, in dit geval mls/equal, om toegang te krijgen tot alle labels. In apache moet je het opstartscript /usr/local/etc/rc.d/apache24 bewerken. Wijzig de apache24_prestart-functie:

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

В officieel In de handleiding staat nog een voorbeeld, maar ik kon het niet gebruiken omdat ik steeds een melding kreeg dat ik het commando setpmac niet kon gebruiken.

Uitgang

Deze methode voor het distribueren van toegang zal een extra beveiligingsniveau toevoegen aan apache (hoewel deze methode geschikt is voor elke andere stapel), die bovendien in een gevangenis draait, terwijl dit voor de beheerder allemaal transparant en onmerkbaar zal gebeuren.

Lijst met bronnen die mij hebben geholpen bij het schrijven van deze publicatie:

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

Bron: www.habr.com

Voeg een reactie