Obligāts tiesību izplatīŔanas modelis FreeBSD

Ievads

Lai nodroŔinātu papildu servera droŔības līmeni, varat izmantot mandāta modelis piekļuves sadale. Šajā publikācijā ir aprakstīts, kā jūs varat palaist apache cietumā ar piekļuvi tikai tiem komponentiem, kuriem nepiecieŔama piekļuve, lai apache un php darbotos pareizi. Izmantojot Ŕo principu, jūs varat ierobežot ne tikai Apache, bet arī jebkuru citu steku.

TreniņŔ

Å Ä« metode ir piemērota tikai ufs failu sistēmai; Å”ajā piemērā zfs tiks izmantots attiecÄ«gi galvenajā sistēmā un ufs attiecÄ«gi cietumā. Pirmais solis ir kodola atjaunoÅ”ana; instalējot FreeBSD, instalējiet avota kodu.
Kad sistēma ir instalēta, rediģējiet failu:

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

Šim failam jāpievieno tikai viena rinda:

options     MAC_MLS

Marķējumam mls/high bÅ«s dominējoÅ”s stāvoklis pār marķējumu mls/low, lietojumprogrammas, kas tiks palaistas ar marķējumu mls/low, nevarēs piekļūt failiem, kuriem ir marķējums mls/high. SÄ«kāku informāciju par visiem FreeBSD sistēmā pieejamajiem tagiem var atrast Å”eit vadÄ«ba.
Pēc tam dodieties uz direktoriju /usr/src:

cd /usr/src

Lai sāktu kodola veidoÅ”anu, palaidiet (taustiņā j norādiet sistēmas kodolu skaitu):

make -j 4 buildkernel KERNCONF=GENERIC

Pēc kodola kompilÄ“Å”anas tas jāinstalē:

make installkernel KERNCONF=GENERIC

Pēc kodola instalÄ“Å”anas nesteidzieties pārstartēt sistēmu, jo ir nepiecieÅ”ams pārsÅ«tÄ«t lietotājus uz pieteikÅ”anās klasi, iepriekÅ” to konfigurējot. Rediģējiet failu /etc/login.conf, Å”ajā failā ir jārediģē noklusējuma pieteikÅ”anās klase, ievadiet to formā:

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:

Rinda :label=mls/equal ļaus lietotājiem, kuri ir Ŕīs klases dalÄ«bnieki, piekļūt failiem, kas ir marķēti ar jebkuru etiÄ·eti (mls/low, mls/high). Pēc Ŕīm manipulācijām jums ir jāpārveido datu bāze un jāievieto root lietotājs (kā arÄ« tie, kuriem tas ir nepiecieÅ”ams) Å”ajā pieteikÅ”anās klasē:

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

Lai politika attiektos tikai uz failiem, jums ir jārediģē /etc/mac.conf fails, atstājot tajā tikai vienu rindiņu:

default_labels file ?mls

Automātiskajai palaiŔanai ir jāpievieno arī modulis mac_mls.ko:

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

Pēc tam jÅ«s varat droÅ”i restartēt sistēmu. Kā izveidot cietums To var izlasÄ«t vienā no manām publikācijām. Bet pirms cietuma izveides jums jāpievieno cietais disks un tajā jāizveido failu sistēma un jāiespējo tajā vairākas etiÄ·etes, jāizveido ufs2 failu sistēma ar klastera lielumu 64 kb:

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

Pēc failu sistēmas izveides un vairāku etiÄ·eÅ”u pievienoÅ”anas cietais disks jāpievieno /etc/fstab, pievienojiet Å”im failam rindiņu:

/dev/ada1               /jail  ufs     rw              0       1

Mountpoint norādiet direktoriju, kurā uzstādÄ«sit cieto disku; Pass noteikti norādiet 1 (kādā secÄ«bā Å”is cietais disks tiks pārbaudÄ«ts) - tas ir nepiecieÅ”ams, jo ufs failu sistēma ir jutÄ«ga pret pēkŔņiem strāvas padeves pārtraukumiem. . Pēc Ŕīm darbÄ«bām uzstādiet disku:

mount /dev/ada1 /jail

Instalējiet cietumu Å”ajā direktorijā. Pēc tam, kad cietums darbojas, tajā ir jāveic tādas paÅ”as manipulācijas kā galvenajā sistēmā ar lietotājiem un failiem /etc/login.conf, /etc/mac.conf.

koriģēŔana

Pirms nepiecieÅ”amo tagu instalÄ“Å”anas iesaku instalēt visas nepiecieÅ”amās pakotnes, manā gadÄ«jumā tagi tiks iestatÄ«ti, ņemot vērā Ŕīs pakotnes:

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 

Å ajā piemērā etiÄ·etes tiks iestatÄ«tas, ņemot vērā Å”o pakotņu atkarÄ«bas. Protams, jÅ«s varat to izdarÄ«t vienkārŔāk: mapei /usr/local/lib un failiem, kas atrodas Å”ajā direktorijā, iestatiet mls/low etiÄ·etes un turpmākās instalētās pakotnes (piemēram, papildu paplaÅ”inājumi php) varēs piekļūt. bibliotēkas Å”ajā direktorijā, bet man Ŕķiet labāk nodroÅ”ināt piekļuvi tikai tiem failiem, kas ir nepiecieÅ”ami. Apturēt cietumu un visiem failiem iestatÄ«t mls/high etiÄ·etes:

setfmac -R mls/high /jail

Iestatot atzÄ«mes, process tiks apturēts, ja setfmac saskarsies ar cietajām saitēm, manā piemērā es izdzēsu cietās saites Ŕādos direktorijos:

/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

Kad etiķetes ir iestatītas, jums ir jāiestata mls/low etiķetes apache, vispirms ir jānoskaidro, kādi faili ir nepiecieŔami, lai palaistu apache:

ldd /usr/local/sbin/httpd

Pēc Ŕīs komandas izpildes ekrānā tiks parādÄ«tas atkarÄ«bas, taču ar nepiecieÅ”amo etiÄ·eÅ”u iestatÄ«Å”anu Å”iem failiem nepietiks, jo direktorijiem, kuros Å”ie faili atrodas, ir mls/high etiÄ·ete, tāpēc arÄ« Å”ie direktoriji ir jāmarķē mls/mazs. Startējot, apache izvadÄ«s arÄ« failus, kas ir nepiecieÅ”ami tā palaiÅ”anai, un php Ŕīs atkarÄ«bas var atrast httpd-error.log žurnālā.

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

Å ajā sarakstā ir ietverti mls/low tagi visiem failiem, kas nepiecieÅ”ami pareizai apache un php kombinācijas darbÄ«bai (pakotnēm, kas ir instalētas manā piemērā).

Pēdējais pieskāriens bÅ«s konfigurēt cietumu, lai tas darbotos mls/vienādā lÄ«menÄ« un apache mls/zemā lÄ«menÄ«. Lai sāktu cietumu, jums ir jāveic izmaiņas skriptā /etc/rc.d/jail, jāatrod Å”ajā skriptā jail_start funkcijas, jāmaina komandas mainÄ«gais uz formu:

command="setpmac mls/equal $jail_program"

Komanda setpmac palaiž izpildāmo failu vajadzÄ«gajā iespēju lÄ«menÄ«, Å”ajā gadÄ«jumā mls/equal, lai varētu piekļūt visām etiÄ·etēm. Programmā apache ir jārediģē starta skripts /usr/local/etc/rc.d/apache24. Mainiet funkciju apache24_prestart:

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

Š’ ierēdnis Rokasgrāmatā ir vēl viens piemērs, bet es nevarēju to izmantot, jo es pastāvÄ«gi saņēmu ziņojumu par nespēju izmantot setpmac komandu.

secinājums

Å Ä« piekļuves sadales metode pieŔķirs papildu droŔības lÄ«meni apache (lai gan Ŕī metode ir piemērota jebkuram citam stekam), kas turklāt darbojas cietumā, tajā paŔā laikā administratoram tas viss notiks caurspÄ«dÄ«gi un nemanāmi.

Avotu saraksts, kas man palÄ«dzēja Ŕīs publikācijas tapÅ”anā:

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

Avots: www.habr.com

Pievieno komentāru