Introduzione
Per fornire un ulteriore livello di sicurezza del server, è possibile utilizzare
Formazione
Questo metodo è adatto solo per il file system ufs; in questo esempio, zfs verrà utilizzato rispettivamente nel sistema principale e ufs nella jail. Il primo passo è ricostruire il kernel; quando installi FreeBSD, installa il codice sorgente.
Dopo aver installato il sistema, modificare il file:
/usr/src/sys/amd64/conf/GENERIC
Devi solo aggiungere una riga a questo file:
options MAC_MLS
L'etichetta mls/high avrà una posizione dominante sull'etichetta mls/low, le applicazioni che verranno avviate con l'etichetta mls/low non potranno accedere ai file che hanno l'etichetta mls/high. Maggiori dettagli su tutti i tag disponibili nel sistema FreeBSD possono essere trovati qui
Successivamente, vai alla directory /usr/src:
cd /usr/src
Per iniziare a costruire il kernel, esegui (nel tasto j, specifica il numero di core nel sistema):
make -j 4 buildkernel KERNCONF=GENERIC
Dopo che il kernel è stato compilato, deve essere installato:
make installkernel KERNCONF=GENERIC
Dopo aver installato il kernel, non affrettarti a riavviare il sistema, poiché è necessario trasferire gli utenti alla classe di login, dopo averla precedentemente configurata. Modifica il file /etc/login.conf, in questo file devi modificare la classe di login predefinita, portala nel modulo:
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 riga :label=mls/equal consentirà agli utenti che sono membri di questa classe di accedere ai file contrassegnati con qualsiasi etichetta (mls/low, mls/high). Dopo queste manipolazioni, è necessario ricostruire il database e posizionare l'utente root (così come coloro che ne hanno bisogno) in questa classe di accesso:
cap_mkdb /etc/login.conf
pw usermod root -L default
Affinché la policy si applichi solo ai file, è necessario modificare il file /etc/mac.conf, lasciando al suo interno solo una riga:
default_labels file ?mls
Devi anche aggiungere il modulo mac_mls.ko all'esecuzione automatica:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Successivamente, puoi riavviare in sicurezza il sistema. Come creare
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Dopo aver creato il file system e aggiunto multilabel, è necessario aggiungere il disco rigido a /etc/fstab, aggiungere la riga a questo file:
/dev/ada1 /jail ufs rw 0 1
In Mountpoint, specifica la directory in cui monterai il disco rigido; in Pass, assicurati di specificare 1 (in quale sequenza verrà controllato questo disco rigido): questo è necessario, poiché il file system ufs è sensibile alle improvvise interruzioni di corrente . Dopo questi passaggi, monta il disco:
mount /dev/ada1 /jail
Installa jail in questa directory. Dopo che la prigione è in esecuzione, è necessario eseguire le stesse manipolazioni del sistema principale con gli utenti e i file /etc/login.conf, /etc/mac.conf.
registrazione
Prima di installare i tag necessari, consiglio di installare tutti i pacchetti necessari; nel mio caso i tag verranno impostati tenendo conto di questi pacchetti:
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 questo esempio, le etichette verranno impostate tenendo conto delle dipendenze di questi pacchetti. Certo, puoi farlo in modo più semplice: per la cartella /usr/local/lib e i file che si trovano in questa directory, imposta le etichette mls/low e i successivi pacchetti installati (ad esempio, estensioni aggiuntive per php) potranno accedere le librerie in questa directory, ma mi sembra meglio fornire l'accesso solo ai file necessari. Interrompi il jail e imposta etichette mls/high su tutti i file:
setfmac -R mls/high /jail
Quando si impostano i contrassegni, il processo verrà interrotto se setfmac incontra collegamenti reali, nel mio esempio ho eliminato collegamenti reali nelle seguenti directory:
/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
Dopo che le etichette sono state impostate, devi impostare le etichette mls/low per apache, la prima cosa che devi fare è scoprire quali file sono necessari per avviare apache:
ldd /usr/local/sbin/httpd
Dopo aver eseguito questo comando, le dipendenze verranno visualizzate sullo schermo, ma impostare le etichette necessarie su questi file non sarà sufficiente, poiché le directory in cui si trovano questi file hanno l'etichetta mls/high, quindi anche queste directory devono essere etichettate ml/basso. All'avvio, Apache genererà anche i file necessari per eseguirlo e per php queste dipendenze possono essere trovate nel registro 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
Questo elenco contiene i tag mls/low per tutti i file necessari per il corretto funzionamento della combinazione apache e php (per quei pacchetti installati nel mio esempio).
Il tocco finale sarà configurare jail in modo che venga eseguito al livello mls/uguale e apache al livello mls/basso. Per avviare jail, devi apportare modifiche allo script /etc/rc.d/jail, trovare le funzioni jail_start in questo script, modificare la variabile del comando nella forma:
command="setpmac mls/equal $jail_program"
Il comando setpmac esegue il file eseguibile al livello di capacità richiesto, in questo caso mls/equal, per avere accesso a tutte le etichette. In Apache è necessario modificare lo script di avvio /usr/local/etc/rc.d/apache24. Modifica la funzione apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
В
conclusione
Questo metodo di distribuzione dell'accesso aggiungerà un ulteriore livello di sicurezza ad apache (sebbene questo metodo sia adatto a qualsiasi altro stack), che inoltre gira in jail, allo stesso tempo, per l'amministratore tutto ciò avverrà in modo trasparente e impercettibile.
Elenco delle fonti che mi hanno aiutato nella stesura di questa pubblicazione:
Fonte: habr.com