Modellu di distribuzione di diritti obbligatori in FreeBSD

Introduzione

Per furnisce un livellu supplementu di sicurità di u servitore, pudete aduprà mudellu di mandatu distribuzione di accessu. Questa publicazione descriverà cumu pudete eseguisce apache in una prigiò cù accessu solu à quelli cumpunenti chì necessitanu accessu per apache è php per travaglià bè. Utilizendu stu principiu, pudete limità micca solu Apache, ma ancu qualsiasi altra pila.

A preparazione di

Stu metudu hè adattatu solu per u sistema di schedari ufs in questu esempiu, zfs serà utilizatu in u sistema principale, è ufs in a prigiò, rispettivamente. U primu passu hè di ricustruisce u kernel quandu installate FreeBSD, installate u codice fonte.
Dopu chì u sistema hè stallatu, edità u schedariu:

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

Solu bisognu di aghjunghje una linea à stu schedariu:

options     MAC_MLS

L'etichetta mls/high averà una pusizione dominante nantu à l'etichetta mls/bassa, l'applicazioni chì saranu lanciate cù l'etichetta mls/bassa ùn puderanu micca accede à i schedari chì anu l'etichetta mls/high. Più dettagli nantu à tutte e tag dispunibili in u sistema FreeBSD ponu esse truvati in questu dirigenza.
Dopu, andate à u cartulare /usr/src:

cd /usr/src

Per cumincià à custruisce u kernel, eseguite (in a chjave j, specificate u numeru di core in u sistema):

make -j 4 buildkernel KERNCONF=GENERIC

Dopu chì u kernel hè statu compilatu, deve esse installatu:

make installkernel KERNCONF=GENERIC

Dopu avè installatu u kernel, ùn avete micca affruntà à reboot u sistema, postu chì hè necessariu di trasfirià l'utilizatori à a classa di login, avè cunfiguratu prima. Edite u schedariu /etc/login.conf, in questu schedariu avete bisognu di edità a classa di login predeterminata, porta à a forma:

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:

A linea :label=mls/equal permetterà à l'utilizatori chì sò membri di sta classa accede à i fugliali chì sò marcati cù qualsiasi etichetta (mls/low, mls/high). Dopu à sti manipulazioni, avete bisognu di ricustruisce a basa di dati è mette l'utilizatori root (cum'è quelli chì anu bisognu) in questa classa di login:

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

Per chì a pulitica s'applica solu à i schedari, avete bisognu di edità u schedariu /etc/mac.conf, lascendu una sola linea in questu:

default_labels file ?mls

Avete ancu bisognu di aghjunghje u modulu mac_mls.ko à l'autorun:

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

Dopu questu, pudete reboot in modu sicuru u sistema. Cumu creà cella Pudete leghje in una di e mo publicazioni. Ma prima di creà una prigiò, avete bisognu di aghjunghje un discu duru è creà un sistema di fugliale nantu à ellu è attivà multilabel nantu à questu, crea un sistema di fugliale ufs2 cù una dimensione di cluster di 64kb:

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

Dopu avè creatu u sistema di fugliale è aghjunghjenu multilabel, avete bisognu di aghjunghje u discu duru à /etc/fstab, aghjunghje a linea à questu schedariu:

/dev/ada1               /jail  ufs     rw              0       1

In Mountpoint, specificate u repertoriu in u quale monterà u discu duru in Pass, assicuratevi di specificà 1 (in quale sequenza serà verificatu questu discu duru) - questu hè necessariu, postu chì u sistema di fugliale ufs hè sensibile à i taglii di energia bruschi; . Dopu à sti passi, muntate u discu:

mount /dev/ada1 /jail

Installa jail in stu cartulare. Dopu chì a prigiò hè in esecuzione, avete bisognu di fà i stessi manipulazioni in questu cum'è in u sistema principale cù l'utilizatori è i schedari /etc/login.conf, /etc/mac.conf.

cutter

Prima di stallà i tags necessarii, ricumandemu di installà tutti i pacchetti necessarii in u mo casu, i tags seranu stabilitu in cunsiderà 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 questu esempiu, l'etichette seranu stabilite tenendu in contu e dependenzii di sti pacchetti. Di sicuru, pudete fà più simplice: per u cartulare /usr/local/lib è i fugliali situati in questu repertoriu, stabilisce l'etichette mls/low è i pacchetti installati successivi (per esempiu, estensioni supplementari per php) puderanu accede. e biblioteche in questu repertoriu, ma mi pare megliu furnisce accessu solu à quelli schedari chì sò necessarii. Ferma a prigiò è stabilisce mls/high labels in tutti i fugliali:

setfmac -R mls/high /jail

Quandu stabilisce i marchi, u prucessu serà fermatu se setfmac scontra ligami duri, in u mo esempiu aghju sguassatu ligami duri in i cartulari seguenti:

/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

Dopu chì l'etichette sò state stabilite, avete bisognu di stabilisce l'etiqueta mls / low per l'apache, a prima cosa chì avete da fà hè di sapè quale fugliali sò necessarii per inizià apache:

ldd /usr/local/sbin/httpd

Dopu avè eseguitu stu cumandamentu, i dependenzii seranu affissati nantu à u screnu, ma stabilisce l'etichette necessarie nantu à questi schedari ùn serà micca abbastanza, postu chì i cartulari in quale si trovanu questi schedari anu l'etichetta mls/high, perchè sti cartulari anu da esse ancu etichettati. mls/bassu. Quandu u principiu, l'apache pruducerà ancu i fugliali chì sò necessarii per eseguisce, è per php queste dipendenze ponu esse truvate in u logu 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

Questa lista cuntene mls / low tags per tutti i schedari chì sò necessarii per u funziunamentu currettu di a combinazione apache è php (per quelli pacchetti chì sò stallati in u mo esempiu).

L'ultimu toccu serà di cunfigurà a prigiò per eseguisce à u nivellu mls / uguale, è apache à u nivellu mls / bassu. Per inizià a prigiò, avete bisognu di fà cambiamenti à l'script /etc/rc.d/jail, truvate e funzioni jail_start in questu script, cambiate a variabile di cumanda in a forma:

command="setpmac mls/equal $jail_program"

U cumandamentu setpmac eseguisce u schedariu eseguibile à u livellu di capacità necessariu, in questu casu mls/equal, per avè accessu à tutte e etichette. In apache avete bisognu di edità u script di startup /usr/local/etc/rc.d/apache24. Cambia a funzione apache24_prestart:

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

В ufficiale U manuale cuntene un altru esempiu, ma ùn aghju micca pussutu aduprà perchè aghju continuatu à riceve un missaghju nantu à l'incapacità di utilizà u cumandamentu setpmac.

cunchiusioni

Stu metudu di distribuzione di l'accessu aghjunghje un livellu supplementu di securità à l'apache (ancu si stu metudu hè adattatu per qualsiasi altra pila), chì in più corre in una prigiò, à u stessu tempu, per l'amministratore tuttu ciò chì succede in modu trasparente è unnoticeably.

Lista di fonti chì m'hà aiutatu à scrive sta publicazione:

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

Source: www.habr.com

Add a comment