Derrigorrezko eskubideak banatzeko eredua FreeBSDn

Sarrera

Zerbitzariaren segurtasun maila gehigarri bat eskaintzeko, erabil dezakezu agintaldi eredua sarbide banaketa. Argitalpen honek apache-k apache eta php-ek behar bezala funtzionatzeko sarbidea behar duten osagaietarako sarbidea duten kartzela batean nola exekutatu deskribatuko du. Printzipio hau erabiliz, Apache ez ezik, beste edozein pila ere muga dezakezu.

Prestakuntza

Metodo hau ufs fitxategi-sistemarako bakarrik da egokia; adibide honetan, zfs erabiliko da sistema nagusian eta ufs kartzelan, hurrenez hurren. Lehen urratsa nukleoa berreraikitzea da; FreeBSD instalatzerakoan, instalatu iturburu kodea.
Sistema instalatu ondoren, editatu fitxategia:

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

Lerro bat bakarrik gehitu behar duzu fitxategi honetara:

options     MAC_MLS

mls/high etiketak posizio nagusi bat izango du mls/low etiketaren gainean, mls/low etiketarekin abiaraziko diren aplikazioek ezin izango dute mls/high etiketa duten fitxategietara sartu. FreeBSD sisteman eskuragarri dauden etiketa guztiei buruzko xehetasun gehiago honetan aurki daitezke lidergoa.
Ondoren, joan /usr/src direktoriora:

cd /usr/src

Nukleoa eraikitzen hasteko, exekutatu (j teklan, zehaztu sistemako nukleo kopurua):

make -j 4 buildkernel KERNCONF=GENERIC

Nukleoa konpilatu ondoren, instalatu behar da:

make installkernel KERNCONF=GENERIC

Nukleoa instalatu ondoren, ez izan presarik sistema berrabiarazteko, beharrezkoa baita erabiltzaileak saioa hasteko klasera transferitzea, aurretik konfiguratuta. Editatu /etc/login.conf fitxategia, fitxategi honetan saioa hasteko klase lehenetsia editatu behar duzu, ekarri formulariora:

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:

:label=mls/equal lerroak klase honetako kide diren erabiltzaileei edozein etiketarekin markatutako fitxategiak (mls/low, mls/high) atzitzeko aukera emango die. Manipulazio hauen ondoren, datu-basea berreraiki eta root erabiltzailea (baita behar dutenak ere) saio-hasierako klase honetan kokatu behar duzu:

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

Politika fitxategiei soilik aplikatzeko, /etc/mac.conf fitxategia editatu behar duzu, lerro bakarra utziz:

default_labels file ?mls

Mac_mls.ko modulua ere gehitu behar duzu abiarazte automatikoan:

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

Horren ondoren, segurtasunez berrabia dezakezu sistema. Nola sortu kartzelan Nire argitalpenetako batean irakur dezakezu. Baina kartzela bat sortu aurretik, disko gogor bat gehitu eta fitxategi-sistema bat sortu eta bertan etiketa anitzeko gaitu behar duzu, sortu ufs2 fitxategi-sistema bat 64 kb-ko kluster tamaina duena:

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

Fitxategi-sistema sortu eta etiketa anitzekoa gehitu ondoren, disko gogorra gehitu behar duzu /etc/fstab-en, gehitu lerroa fitxategi honetara:

/dev/ada1               /jail  ufs     rw              0       1

Mountpoint-en, zehaztu zein direktoriotan muntatuko duzun disko gogorra; Pass-en, ziurtatu 1 zehazten duzula (zein sekuentzian egiaztatuko den disko gogor hori) - hau beharrezkoa da, ufs fitxategi-sistema bat-bateko elektrizitate-mozketen aurrean sentikorra baita. . Urrats hauen ondoren, muntatu diskoa:

mount /dev/ada1 /jail

Instalatu kartzela direktorio honetan. Kartzela exekutatzen hasi ondoren, sistema nagusian egiten diren manipulazio berdinak egin behar dituzu erabiltzaileekin eta /etc/login.conf, /etc/mac.conf fitxategiekin.

doikuntza

Beharrezko etiketak instalatu aurretik, beharrezko pakete guztiak instalatzea gomendatzen dut; nire kasuan, etiketak pakete hauek kontuan hartuta ezarriko dira:

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 

Adibide honetan, etiketak ezarriko dira pakete horien menpekotasunak kontuan hartuta. Jakina, errazago egin dezakezu: /usr/local/lib karpetarako eta direktorio honetan dauden fitxategietarako, ezarri mls/low etiketak eta ondorengo instalatutako paketeak (adibidez, php-rako luzapen gehigarriak) sartu ahal izango dira. direktorio honetako liburutegiak, baina hobe iruditzen zait beharrezkoak diren fitxategi horietarako soilik sarbidea ematea. Gelditu kartzela eta ezarri mls/high etiketak fitxategi guztietan:

setfmac -R mls/high /jail

Markak ezartzerakoan, prozesua gelditu egingo da setfmac-ek esteka gogorrak aurkitzen baditu, nire adibidean hurrengo direktorioetako esteka gogorrak ezabatu ditut:

/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

Etiketak ezarri ondoren, apacherako mls/low etiketak ezarri behar dituzu, egin behar duzun lehenengo gauza apache abiarazteko zein fitxategi behar diren jakitea da:

ldd /usr/local/sbin/httpd

Komando hau exekutatu ondoren, menpekotasunak bistaratuko dira pantailan, baina fitxategi horietan beharrezko etiketak ezartzea ez da nahikoa izango, fitxategi horiek dauden direktorioek mls/high etiketa baitute, eta, beraz, direktorio hauek ere etiketatuak izan behar dira. mls/baxua. Abiatzean, apache-k exekutatzeko beharrezkoak diren fitxategiak ere aterako ditu, eta php-rako dependentzia hauek httpd-error.log erregistroan aurki daitezke.

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

Zerrenda honek mls/low etiketak ditu apache eta php konbinazioaren funtzionamendu zuzenerako beharrezkoak diren fitxategi guztientzat (nire adibidean instalatuta dauden paketeetarako).

Azken ukitua jail mls/equal mailan exekutatzeko eta apache mls/maila baxuan konfiguratzea izango da. Jail abiarazteko, /etc/rc.d/jail script-ean aldaketak egin behar dituzu, bilatu jail_start funtzioak script honetan, aldatu komando-aldagaia formulariora:

command="setpmac mls/equal $jail_program"

Setpmac komandoak fitxategi exekutagarria behar den gaitasun mailan exekutatzen du, kasu honetan mls/equal, etiketa guztietarako sarbidea izateko. Apache-n abiarazteko scripta editatu behar duzu /usr/local/etc/rc.d/apache24. Aldatu apache24_prestart funtzioa:

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

Π’ ofiziala Eskuliburuak beste adibide bat dauka, baina ezin izan dut erabili, setpmac komandoa erabiltzeko ezintasunari buruzko mezu bat jasotzen jarraitzen nuelako.

Irteera

Sarbidea banatzeko metodo honek segurtasun maila gehigarri bat gehituko dio apacheri (metodo hau beste edozein pilarako egokia den arren), eta gainera kartzela batean exekutatzen dena, aldi berean, administratzailearentzat hori guztia garden eta oharkabean gertatuko da.

Argitalpen hau idazten lagundu didaten iturrien zerrenda:

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

Iturria: www.habr.com

Gehitu iruzkin berria