Introducció
Per proporcionar un nivell addicional de seguretat del servidor, podeu utilitzar
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
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
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}
}
В
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ó:
Font: www.habr.com