Model de distribució de drets obligatoris a FreeBSD

Introducció

Per proporcionar un nivell addicional de seguretat del servidor, podeu utilitzar model de mandat distribució d'accés. Aquesta publicació descriurà com podeu executar Apache en una presó amb accés només a aquells components que requereixen accés perquè Apache i php funcionin correctament. Utilitzant aquest principi, podeu limitar no només Apache, sinó també qualsevol altra pila.

Entrenament

Aquest mètode només és adequat per al sistema de fitxers ufs; en aquest exemple, s'utilitzarà zfs al sistema principal i ufs a la presó, respectivament. El primer pas és reconstruir el nucli; quan instal·leu FreeBSD, instal·leu el codi font.
Un cop instal·lat el sistema, editeu el fitxer:

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

Només heu d'afegir una línia a aquest fitxer:

options     MAC_MLS

L'etiqueta mls/high tindrà una posició dominant sobre l'etiqueta mls/low, les aplicacions que s'iniciaran amb l'etiqueta mls/low no podran accedir als fitxers que tinguin l'etiqueta mls/high. Es poden trobar més detalls sobre totes les etiquetes disponibles al sistema FreeBSD en aquest lideratge.
A continuació, aneu al directori /usr/src:

cd /usr/src

Per començar a construir el nucli, executeu (a la tecla j, especifiqueu el nombre de nuclis del sistema):

make -j 4 buildkernel KERNCONF=GENERIC

Un cop compilat el nucli, s'ha d'instal·lar:

make installkernel KERNCONF=GENERIC

Després d'instal·lar el nucli, no us precipiteu a reiniciar el sistema, ja que cal transferir els usuaris a la classe d'inici de sessió, havent-lo configurat prèviament. Editeu el fitxer /etc/login.conf, en aquest fitxer heu d'editar la classe d'inici de sessió predeterminada, portar-la al formulari:

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:

La línia :label=mls/equal permetrà als usuaris que són membres d'aquesta classe accedir als fitxers marcats amb qualsevol etiqueta (mls/low, mls/high). Després d'aquestes manipulacions, heu de reconstruir la base de dades i col·locar l'usuari root (així com els que ho necessiten) en aquesta classe d'inici de sessió:

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

Perquè la política s'apliqui només als fitxers, cal que editeu el fitxer /etc/mac.conf, deixant-hi només una línia:

default_labels file ?mls

També heu d'afegir el mòdul mac_mls.ko a l'execució automàtica:

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

Després d'això, podeu reiniciar el sistema amb seguretat. Com crear presó El podeu llegir en una de les meves publicacions. Però abans de crear una presó, heu d'afegir un disc dur i crear-hi un sistema de fitxers i habilitar-hi multietiqueta, crear un sistema de fitxers ufs2 amb una mida de clúster de 64 kb:

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

Després de crear el sistema de fitxers i afegir multietiqueta, cal afegir el disc dur a /etc/fstab, afegir la línia a aquest fitxer:

/dev/ada1               /jail  ufs     rw              0       1

A Mountpoint, especifiqueu el directori en què muntareu el disc dur; a Pass, assegureu-vos d'especificar 1 (en quina seqüència es comprovarà aquest disc dur): això és necessari, ja que el sistema de fitxers ufs és sensible als talls sobtats d'alimentació. . Després d'aquests passos, munteu el disc:

mount /dev/ada1 /jail

Instal·leu jail en aquest directori. Un cop s'executa la presó, heu de fer-hi les mateixes manipulacions que al sistema principal amb els usuaris i els fitxers /etc/login.conf, /etc/mac.conf.

ajust

Abans d'instal·lar les etiquetes necessàries, recomano instal·lar tots els paquets necessaris; en el meu cas, les etiquetes s'establiran tenint en compte aquests paquets:

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 

En aquest exemple, les etiquetes s'establiran tenint en compte les dependències d'aquests paquets. Per descomptat, ho podeu fer de manera més senzilla: per a la carpeta /usr/local/lib i els fitxers que es troben en aquest directori, establiu les etiquetes mls/low i els paquets instal·lats posteriors (per exemple, extensions addicionals per a php) podran accedir les biblioteques d'aquest directori, però em sembla millor proporcionar accés només als fitxers que siguin necessaris. Atureu la presó i configureu mls/etiquetes altes a tots els fitxers:

setfmac -R mls/high /jail

Quan es defineixen marques, el procés s'aturarà si setfmac troba enllaços durs, en el meu exemple he suprimit enllaços durs als directoris següents:

/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

Un cop establertes les etiquetes, heu de configurar les etiquetes mls/low per a Apache, el primer que heu de fer és esbrinar quins fitxers es necessiten per iniciar Apache:

ldd /usr/local/sbin/httpd

Després d'executar aquesta ordre, es mostraran dependències a la pantalla, però no n'hi haurà prou amb posar les etiquetes necessàries en aquests fitxers, ja que els directoris on es troben aquests fitxers tenen l'etiqueta mls/high, per la qual cosa també cal etiquetar aquests directoris. mls/baix. Quan s'inicia, apache també mostrarà els fitxers necessaris per executar-lo, i per a php aquestes dependències es poden trobar al registre httpd-error.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

Aquesta llista conté etiquetes mls/low per a tots els fitxers necessaris per al correcte funcionament de la combinació d'apache i php (per als paquets que estan instal·lats al meu exemple).

El toc final serà configurar jail perquè s'executi al nivell mls/equal i apache al nivell mls/baix. Per iniciar la presó, heu de fer canvis a l'script /etc/rc.d/jail, trobar les funcions jail_start en aquest script, canviar la variable d'ordre a la forma:

command="setpmac mls/equal $jail_program"

L'ordre setpmac executa el fitxer executable al nivell de capacitat requerit, en aquest cas mls/equal, per tenir accés a totes les etiquetes. A apache cal editar l'script d'inici /usr/local/etc/rc.d/apache24. Canvieu la funció apache24_prestart:

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

В oficial El manual conté un altre exemple, però no vaig poder utilitzar-lo perquè continuava rebent un missatge sobre la impossibilitat d'utilitzar l'ordre setpmac.

Sortida

Aquest mètode de distribució d'accés afegirà un nivell addicional de seguretat a apache (tot i que aquest mètode és adequat per a qualsevol altra pila), que a més s'executa en una presó, alhora, per a l'administrador tot això passarà de manera transparent i imperceptible.

Llista de fonts que m'han ajudat a escriure aquesta publicació:

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

Font: www.habr.com

Afegeix comentari