Obligatorisk rettighedsfordelingsmodel i FreeBSD

Indledning

For at give et ekstra niveau af serversikkerhed, kan du bruge mandatmodel adgangsfordeling. Denne publikation vil beskrive, hvordan du kan køre apache i et fængsel med kun adgang til de komponenter, der kræver adgang for at apache og php kan fungere korrekt. Ved at bruge dette princip kan du begrænse ikke kun Apache, men også enhver anden stak.

Træning

Denne metode er kun egnet til ufs-filsystemet; i dette eksempel vil zfs blive brugt i henholdsvis hovedsystemet og ufs i fængslet. Det første trin er at genopbygge kernen; når du installerer FreeBSD, skal du installere kildekoden.
Når systemet er installeret, skal du redigere filen:

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

Du behøver kun at tilføje en linje til denne fil:

options     MAC_MLS

mls/høj-etiketten vil have en dominerende stilling over mls/lav-etiketten, applikationer, der vil blive lanceret med mls/lav-etiketten, vil ikke kunne få adgang til filer, der har mls/høj-etiketten. Flere detaljer om alle tilgængelige tags i FreeBSD-systemet kan findes i dette guide.
Gå derefter til mappen /usr/src:

cd /usr/src

For at begynde at bygge kernen, kør (i j-tasten, angiv antallet af kerner i systemet):

make -j 4 buildkernel KERNCONF=GENERIC

Efter at kernen er blevet kompileret, skal den installeres:

make installkernel KERNCONF=GENERIC

Efter installation af kernen skal du ikke skynde dig med at genstarte systemet, da det er nødvendigt at overføre brugere til login-klassen efter at have konfigureret den tidligere. Rediger filen /etc/login.conf, i denne fil skal du redigere standard loginklassen, bringe den til formularen:

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:

Linjen :label=mls/equal giver brugere, der er medlemmer af denne klasse, adgang til filer, der er markeret med en hvilken som helst etiket (mls/low, mls/high). Efter disse manipulationer skal du genopbygge databasen og placere root-brugeren (såvel som dem, der har brug for det) i denne login-klasse:

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

For at politikken kun skal gælde for filer, skal du redigere filen /etc/mac.conf, så der kun er én linje tilbage i den:

default_labels file ?mls

Du skal også tilføje mac_mls.ko-modulet til autorun:

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

Herefter kan du sikkert genstarte systemet. Hvordan man skaber fængsel Du kan læse den i en af ​​mine publikationer. Men før du opretter et fængsel, skal du tilføje en harddisk og oprette et filsystem på det og aktivere multilabel på det, oprette et ufs2-filsystem med en klyngestørrelse på 64kb:

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

Efter at have oprettet filsystemet og tilføjet multilabel, skal du tilføje harddisken til /etc/fstab, tilføje linjen til denne fil:

/dev/ada1               /jail  ufs     rw              0       1

I Mountpoint skal du angive den mappe, som du vil montere harddisken i; I Pass skal du sørge for at angive 1 (i hvilken rækkefølge denne harddisk vil blive kontrolleret) - dette er nødvendigt, da ufs-filsystemet er følsomt over for pludselige strømafbrydelser . Efter disse trin skal du montere disken:

mount /dev/ada1 /jail

Installer jail i denne mappe. Efter at fængslet kører, skal du udføre de samme manipulationer i det som i hovedsystemet med brugere og filerne /etc/login.conf, /etc/mac.conf.

justering

Før du installerer de nødvendige tags, anbefaler jeg at installere alle de nødvendige pakker; i mit tilfælde vil tags blive indstillet under hensyntagen til disse pakker:

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 

I dette eksempel vil etiketter blive sat under hensyntagen til afhængighederne af disse pakker. Selvfølgelig kan du gøre det enklere: for mappen /usr/local/lib og filerne i denne mappe, skal du indstille mls/low-etiketterne og efterfølgende installerede pakker (for eksempel yderligere udvidelser til php) vil være i stand til at få adgang til bibliotekerne i denne mappe, men det forekommer mig bedre at kun give adgang til de filer, der er nødvendige. Stop fængsel og indstil mls/high labels på alle filer:

setfmac -R mls/high /jail

Ved indstilling af mærker vil processen blive stoppet, hvis setfmac støder på hårde links, i mit eksempel slettede jeg hårde links i følgende mapper:

/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

Efter at etiketterne er blevet sat, skal du indstille mls/low labels for apache, det første du skal gøre er at finde ud af hvilke filer der skal til for at starte apache:

ldd /usr/local/sbin/httpd

Efter udførelse af denne kommando vil afhængigheder blive vist på skærmen, men det vil ikke være nok at sætte de nødvendige etiketter på disse filer, da mapperne, hvori disse filer er placeret, har mærket mls/high, så disse mapper skal også mærkes ml/lav. Når du starter, vil apache også udlæse de filer, der er nødvendige for at køre det, og for php kan disse afhængigheder findes i httpd-error.log-loggen.

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

Denne liste indeholder mls/low tags for alle filer, der er nødvendige for den korrekte drift af apache og php kombinationen (for de pakker, der er installeret i mit eksempel).

Den sidste berøring vil være at konfigurere fængsel til at køre på mls/lige niveau, og apache på mls/lavt niveau. For at starte jail skal du foretage ændringer i /etc/rc.d/jail scriptet, finde jail_start funktionerne i dette script, ændre kommandovariablen til formen:

command="setpmac mls/equal $jail_program"

Setpmac-kommandoen kører den eksekverbare fil på det nødvendige kapacitetsniveau, i dette tilfælde mls/equal, for at få adgang til alle etiketter. I apache skal du redigere opstartsscriptet /usr/local/etc/rc.d/apache24. Skift apache24_prestart-funktionen:

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

В officiel Manualen indeholder et andet eksempel, men jeg kunne ikke bruge det, fordi jeg hele tiden fik en besked om manglende evne til at bruge kommandoen setpmac.

Output

Denne metode til at distribuere adgang vil tilføje et ekstra sikkerhedsniveau til apache (selvom denne metode er velegnet til enhver anden stak), som desuden kører i et fængsel, på samme tid, for administratoren vil alt dette ske gennemsigtigt og ubemærket.

Liste over kilder, der hjalp mig med at skrive denne publikation:

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

Kilde: www.habr.com

Tilføj en kommentar