Introductie
Om een extra niveau van serverbeveiliging te bieden, kunt u gebruiken
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
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
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}
}
В
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:
Bron: www.habr.com