Deviga rajta distribumodelo en FreeBSD

Enkonduko

Por provizi plian nivelon de servila sekureco, vi povas uzi mandato modelo alirdistribuo. Ĉi tiu publikigado priskribos kiel vi povas ruli apache en malliberejo kun aliro nur al tiuj komponantoj, kiuj postulas aliron por ke apache kaj php funkciu ĝuste. Uzante ĉi tiun principon, vi povas limigi ne nur Apache, sed ankaŭ ajnan alian stakon.

Trejnado

Ĉi tiu metodo taŭgas nur por la ufs-dosiersistemo; en ĉi tiu ekzemplo, zfs estos uzata en la ĉefsistemo, kaj ufs en la malliberejo, respektive. La unua paŝo estas rekonstrui la kernon; instalante FreeBSD, instalu la fontkodon.
Post kiam la sistemo estas instalita, redaktu la dosieron:

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

Vi nur bezonas aldoni unu linion al ĉi tiu dosiero:

options     MAC_MLS

La mls/alta etikedo havos dominan pozicion super la mls/malalta etikedo, aplikoj kiuj estos lanĉitaj kun la mls/malalta etikedo ne povos aliri dosierojn kiuj havas la mls/alta etikedo. Pliaj detaloj pri ĉiuj disponeblaj etikedoj en la FreeBSD-sistemo troveblas en ĉi tio gvidado.
Poste, iru al la dosierujo /usr/src:

cd /usr/src

Por komenci konstrui la kernon, rulu (en la j-klavo, specifu la nombron da kernoj en la sistemo):

make -j 4 buildkernel KERNCONF=GENERIC

Post kiam la kerno estis kompilita, ĝi devas esti instalita:

make installkernel KERNCONF=GENERIC

Post instalo de la kerno, ne rapidu rekomenci la sistemon, ĉar necesas translokigi uzantojn al la ensaluta klaso, antaŭe agordinte ĝin. Redaktu la /etc/login.conf dosieron, en ĉi tiu dosiero vi devas redakti la defaŭltan ensalutan klason, alportu ĝin al la formo:

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 linio :label=mls/equal permesos al uzantoj kiuj estas membroj de ĉi tiu klaso aliri dosierojn kiuj estas markitaj per iu ajn etikedo (mls/low, mls/high). Post ĉi tiuj manipuladoj, vi devas rekonstrui la datumbazon kaj meti la radikan uzanton (same kiel tiujn, kiuj bezonas ĝin) en ĉi tiu ensaluta klaso:

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

Por ke la politiko aplikiĝu nur al dosieroj, vi devas redakti la dosieron /etc/mac.conf, lasante nur unu linion en ĝi:

default_labels file ?mls

Vi ankaŭ devas aldoni la mac_mls.ko-modulon al aŭtorun:

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

Post ĉi tio, vi povas sekure rekomenci la sistemon. Kiel krei malliberejo Vi povas legi ĝin en unu el miaj eldonaĵoj. Sed antaŭ krei malliberejon, vi devas aldoni malmolan diskon kaj krei dosiersistemon sur ĝi kaj ebligi pluretikedon sur ĝi, krei ufs2-dosiersistemon kun amasgrando de 64kb:

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

Post krei la dosiersistemon kaj aldoni multilabel, vi devas aldoni la malmolan diskon al /etc/fstab, aldoni la linion al ĉi tiu dosiero:

/dev/ada1               /jail  ufs     rw              0       1

En Mountpoint, specifu la dosierujon, en kiu vi montos la malmolan diskon; en Pass, nepre specifu 1 (en kia sinsekvo ĉi tiu malmola disko estos kontrolita) - tio estas necesa, ĉar la dosiersistemo ufs estas sentema al subitaj elektroŝnuroj. . Post ĉi tiuj paŝoj, muntu la diskon:

mount /dev/ada1 /jail

Instalu malliberejon en ĉi tiu dosierujo. Post kiam la malliberejo funkcias, vi devas fari la samajn manipuladojn en ĝi kiel en la ĉefa sistemo kun uzantoj kaj la dosieroj /etc/login.conf, /etc/mac.conf.

alĝustigo

Antaŭ ol instali la necesajn etikedojn, mi rekomendas instali ĉiujn necesajn pakaĵojn; en mia kazo, la etikedoj estos fiksitaj konsiderante ĉi tiujn pakaĵojn:

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 

En ĉi tiu ekzemplo, etikedoj estos fiksitaj konsiderante la dependecojn de ĉi tiuj pakoj. Kompreneble, vi povas fari ĝin pli simple: por la dosierujo /usr/local/lib kaj la dosieroj situantaj en ĉi tiu dosierujo, agordu la mls/low-etikedojn kaj postajn instalitajn pakaĵojn (ekzemple pliajn etendaĵojn por php) povos aliri. la bibliotekoj en ĉi tiu dosierujo, sed ŝajnas al mi pli bone havigi aliron nur al tiuj dosieroj kiuj estas necesaj. Ĉesu malliberejon kaj agordu mls/altajn etikedojn sur ĉiuj dosieroj:

setfmac -R mls/high /jail

Kiam fiksis markojn, la procezo estos ĉesigita se setfmac renkontas malmolajn ligilojn, en mia ekzemplo mi forigis malmolajn ligilojn en la sekvaj dosierujoj:

/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

Post kiam la etikedoj estas fiksitaj, vi devas agordi la mls/malaltajn etikedojn por apache, la unua afero, kiun vi devas fari, estas ekscii, kiajn dosierojn necesas por komenci apache:

ldd /usr/local/sbin/httpd

Post ekzekuto de ĉi tiu komando, dependecoj aperos sur la ekrano, sed agordi la necesajn etikedojn sur ĉi tiuj dosieroj ne sufiĉos, ĉar la dosierujoj en kiuj troviĝas tiuj dosieroj havas la mls/high-etikedon, do ankaŭ ĉi tiuj dosierujoj devas esti etikeditaj. mls/malalta. Komencante, apache ankaŭ eligos la dosierojn necesajn por ruli ĝin, kaj por php ĉi tiuj dependecoj troviĝas en la httpd-error.log protokolo.

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

Ĉi tiu listo enhavas mls/malaltajn etikedojn por ĉiuj dosieroj, kiuj estas necesaj por la ĝusta funkciado de la kombinaĵo apache kaj php (por tiuj pakaĵoj instalitaj en mia ekzemplo).

La fina tuŝo estos agordi malliberejon por funkcii je la mls/egala nivelo, kaj apache ĉe la mls/malalta nivelo. Por komenci malliberejon, vi devas fari ŝanĝojn al la skripto /etc/rc.d/jail, trovi la funkciojn jail_start en ĉi tiu skripto, ŝanĝi la komandan variablon al la formo:

command="setpmac mls/equal $jail_program"

La setpmac-komando rulas la plenumeblan dosieron ĉe la bezonata kapablonivelo, ĉi-kaze mls/equal, por havi aliron al ĉiuj etikedoj. En apache vi devas redakti la startskripton /usr/local/etc/rc.d/apache24. Ŝanĝu la funkcion apache24_prestart:

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

В oficiala La manlibro enhavas alian ekzemplon, sed mi ne povis uzi ĝin ĉar mi daŭre ricevis mesaĝon pri la malkapablo uzi la setpmac-ordonon.

konkludo

Ĉi tiu metodo de disdonado de aliro aldonos plian nivelon de sekureco al apache (kvankam ĉi tiu metodo taŭgas por iu ajn alia stako), kiu krome funkcias en malliberejo, samtempe, por la administranto ĉio ĉi okazos travideble kaj nerimarkeble.

Listo de fontoj kiuj helpis min verki ĉi tiun publikaĵon:

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

fonto: www.habr.com

Aldoni komenton