Kohustuslik õiguste levitamise mudel FreeBSD-s

Sissejuhatus

Serveri täiendava turvalisuse taseme tagamiseks võite kasutada mandaadi mudel juurdepääsu levitamine. See väljaanne kirjeldab, kuidas saate apache'i vanglas käivitada, pääsedes juurde ainult nendele komponentidele, mis nõuavad juurdepääsu apache'i ja php korrektseks tööks. Seda põhimõtet kasutades saate piirata mitte ainult Apache'i, vaid ka mis tahes muud virna.

Koolitus

See meetod sobib ainult ufs-failisüsteemi jaoks; selles näites kasutatakse põhisüsteemis vastavalt zfs-i ja vanglas ufs-i. Esimene samm on kerneli ümberehitamine; FreeBSD installimisel installige lähtekood.
Pärast süsteemi installimist redigeerige faili:

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

Peate sellele failile lisama ainult ühe rea:

options     MAC_MLS

Märgistus mls/high on märgistuse mls/low ees domineerivam, rakendused, mis käivitatakse sildiga mls/low, ei pääse juurde failidele, millel on silt mls/high. Lisateavet kõigi FreeBSD süsteemis saadaolevate siltide kohta leiate siit juhend.
Järgmisena minge kataloogi /usr/src:

cd /usr/src

Kerneli ehitamise alustamiseks käivitage (klahvis j määrake tuumade arv süsteemis):

make -j 4 buildkernel KERNCONF=GENERIC

Pärast kerneli kompileerimist tuleb see installida:

make installkernel KERNCONF=GENERIC

Pärast kerneli installimist ärge kiirustage süsteemi taaskäivitama, kuna kasutajad on vaja üle kanda sisselogimisklassi, olles selle eelnevalt konfigureerinud. Redigeerige faili /etc/login.conf, selles failis peate muutma vaikimisi sisselogimisklassi, viige see vormile:

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:

Rida :label=mls/equal võimaldab kasutajatel, kes on selle klassi liikmed, juurde pääseda failidele, mis on tähistatud mis tahes sildiga (mls/low, mls/high). Pärast neid manipuleerimisi peate andmebaasi uuesti üles ehitama ja asetama juurkasutaja (ja ka need, kes seda vajavad) sellesse sisselogimisklassi:

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

Selleks, et poliitika kehtiks ainult failidele, peate redigeerima faili /etc/mac.conf, jättes sinna ainult ühe rea:

default_labels file ?mls

Samuti peate automaatkäivitusse lisama mooduli mac_mls.ko:

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

Pärast seda saate süsteemi turvaliselt taaskäivitada. Kuidas luua vangla Saate seda lugeda ühest minu väljaandest. Kuid enne vangla loomist peate lisama kõvaketta ja looma sellele failisüsteemi ning lubama sellel mitme sildi, looma ufs2 failisüsteemi klastri suurusega 64 kb:

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

Pärast failisüsteemi loomist ja mitme sildi lisamist peate kõvakettale /etc/fstab lisama, lisage sellele failile rida:

/dev/ada1               /jail  ufs     rw              0       1

Mountpointis määrake kataloog, kuhu kõvaketta ühendate; Passis määrake kindlasti 1 (mis järjekorras seda kõvaketast kontrollitakse) - see on vajalik, kuna ufs-failisüsteem on tundlik ootamatute elektrikatkestuste suhtes . Pärast neid samme ühendage ketas:

mount /dev/ada1 /jail

Installige vangla sellesse kataloogi. Pärast vangla käivitamist peate selles tegema samad manipulatsioonid nagu põhisüsteemis kasutajate ja failidega /etc/login.conf, /etc/mac.conf.

reguleerimine

Enne vajalike siltide installimist soovitan installida kõik vajalikud paketid, minu puhul määratakse sildid nende pakettide alusel:

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 

Selles näites määratakse sildid, võttes arvesse nende pakettide sõltuvusi. Muidugi saate seda teha lihtsamalt: kausta /usr/local/lib ja selles kataloogis olevate failide jaoks määrake sildid mls/low ja sellele pääsevad juurde järgmised installitud paketid (näiteks php lisalaiendid). selles kataloogis olevaid teeke, kuid mulle tundub parem võimaldada juurdepääs ainult neile failidele, mis on vajalikud. Peatage vangla ja määrake kõikidele failidele sildid mls/high:

setfmac -R mls/high /jail

Märkide määramisel peatatakse protsess, kui setfmac kohtab kõvasid linke, minu näites kustutasin kõvad lingid järgmistes kataloogides:

/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

Pärast siltide määramist peate määrama apache jaoks mls/low sildid. Esimese asjana peate välja selgitama, milliseid faile on vaja apache'i käivitamiseks:

ldd /usr/local/sbin/httpd

Pärast selle käsu täitmist kuvatakse ekraanil sõltuvused, kuid nendele failidele vajalike siltide määramisest ei piisa, kuna kataloogidel, milles need failid asuvad, on silt mls/high, seega tuleb ka need kataloogid märgistada mls/madal. Käivitamisel väljastab apache ka failid, mis on selle käivitamiseks vajalikud ja php puhul leiab need sõltuvused httpd-error.log logist.

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

See loend sisaldab mls/low silte kõigi failide jaoks, mis on vajalikud apache ja php kombinatsiooni korrektseks toimimiseks (nende pakettide jaoks, mis on minu näites installitud).

Viimane puudutus on seadistada vangla töötama tasemel mls/võrdne ja apache tasemel mls/madal. Jaili käivitamiseks peate muutma skripti /etc/rc.d/jail, leidma selles skriptis funktsioonid jail_start, muutma käsumuutujaks vormi:

command="setpmac mls/equal $jail_program"

Käsk setpmac käivitab käivitatava faili nõutud võimekuse tasemel, antud juhul mls/equal, et pääseda juurde kõikidele siltidele. Apache'is peate redigeerima käivitusskripti /usr/local/etc/rc.d/apache24. Funktsiooni apache24_prestart muutmine:

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

В ametnik Kasutusjuhend sisaldab veel ühte näidet, kuid ma ei saanud seda kasutada, kuna sain pidevalt teate, et käsku setpmac ei saa kasutada.

Väljund

See juurdepääsu jagamise meetod lisab apache'ile täiendava turvalisuse taseme (kuigi see meetod sobib igale teisele virnale), mis lisaks töötab vanglas, samal ajal toimub see kõik administraatori jaoks läbipaistvalt ja märkamatult.

Allikate loend, mis aitasid mind selle väljaande kirjutamisel:

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

Allikas: www.habr.com

Lisa kommentaar