FreeBSD дээрх заавал эрхийн хуваарилалтын загвар

Танилцуулга

Серверийн аюулгүй байдлын нэмэлт түвшинг хангахын тулд та ашиглаж болно мандат загвар хандалтын хуваарилалт. Энэхүү нийтлэл нь apache болон php-г зөв ажиллуулахын тулд зөвхөн тэдгээр бүрэлдэхүүн хэсгүүдэд хандах эрхтэйгээр apache-г шоронд хэрхэн ажиллуулах талаар тайлбарлах болно. Энэ зарчмыг ашигласнаар та зөвхөн Apache төдийгүй бусад стекийг хязгаарлаж болно.

Сургалт

Энэ арга нь зөвхөн ufs файлын системд тохиромжтой; энэ жишээнд zfs үндсэн системд, ufs нь шоронд тус тус ашиглагдах болно. Эхний алхам бол цөмийг дахин бүтээх бөгөөд FreeBSD-г суулгахдаа эх кодыг суулгана.
Системийг суулгасны дараа файлыг засварлана уу:

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

Та энэ файлд зөвхөн нэг мөр нэмэх хэрэгтэй:

options     MAC_MLS

mls/өндөр шошго нь mls/бага шошго дээр давамгайлах байр суурьтай байх бөгөөд mls/бага шошготой ажиллах програмууд mls/өндөр шошготой файлд хандах боломжгүй болно. FreeBSD систем дэх боломжтой бүх шошготой холбоотой дэлгэрэнгүй мэдээллийг эндээс олж болно гарын авлага.
Дараа нь /usr/src лавлах руу очно уу:

cd /usr/src

Цөмийг барьж эхлэхийн тулд ажиллуулна уу (j товчлуур дээр систем дэх цөмийн тоог зааж өгнө үү):

make -j 4 buildkernel KERNCONF=GENERIC

Цөмийг хөрвүүлсний дараа үүнийг суулгах ёстой:

make installkernel KERNCONF=GENERIC

Цөмийг суулгасны дараа системийг дахин ачаалах гэж яарах хэрэггүй, учир нь хэрэглэгчдийг өмнө нь тохируулсны дараа нэвтрэх ангилалд шилжүүлэх шаардлагатай байдаг. /etc/login.conf файлыг засварлана уу, энэ файлд та анхдагч нэвтрэх классыг засварлах шаардлагатай бөгөөд үүнийг маягт руу оруулна уу:

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 мөр нь энэ ангийн гишүүдэд ямар ч шошготой (mls/low, mls/high) тэмдэглэгдсэн файлд хандах боломжийг олгоно. Эдгээр залруулга хийсний дараа та мэдээллийн баазыг дахин үүсгэж, үндсэн хэрэглэгчийг (мөн хэрэгтэй байгаа хүмүүсийг) энэ нэвтрэх ангилалд байрлуулах хэрэгтэй.

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

Бодлого зөвхөн файлд үйлчлэхийн тулд та /etc/mac.conf файлыг засварлаж, дотор нь зөвхөн нэг мөр үлдээх хэрэгтэй:

default_labels file ?mls

Та мөн автоматаар ажиллуулахын тулд mac_mls.ko модулийг нэмэх хэрэгтэй:

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

Үүний дараа та системийг аюулгүйгээр дахин ачаалж болно. Хэрхэн бий болгох вэ шорон Та үүнийг миний хэвлэлүүдийн аль нэгнээс уншиж болно. Гэхдээ шорон үүсгэхээсээ өмнө та хатуу диск нэмж, дээр нь файлын систем үүсгэж, олон шошгыг идэвхжүүлж, 2 кб кластерын хэмжээтэй ufs64 файлын системийг үүсгэх хэрэгтэй.

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

Файлын системийг үүсгэж, олон шошго нэмсний дараа та хатуу дискийг /etc/fstab руу нэмж, энэ файлд мөрийг нэмнэ үү.

/dev/ada1               /jail  ufs     rw              0       1

Mountpoint дээр хатуу дискээ холбох директороо зааж өгөх; Pass-д 1-ийг зааж өгөх хэрэгтэй (энэ хатуу дискийг ямар дарааллаар шалгах вэ) - энэ нь зайлшгүй шаардлагатай, учир нь ufs файлын систем гэнэт цахилгаан тасрахад мэдрэмтгий байдаг. . Эдгээр алхмуудын дараа дискийг холбоно уу:

mount /dev/ada1 /jail

Энэ директорт шоронг суулгана уу. Шорон ажиллаж эхэлсний дараа та үндсэн систем дэх хэрэглэгчид болон /etc/login.conf, /etc/mac.conf файлуудтай адил залруулга хийх хэрэгтэй.

тохируулга

Шаардлагатай шошгуудыг суулгахын өмнө би шаардлагатай бүх багцыг суулгахыг зөвлөж байна; миний тохиолдолд шошгуудыг эдгээр багцуудыг харгалзан тохируулна.

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 

Энэ жишээнд эдгээр багцуудын хамаарлыг харгалзан шошгыг тохируулах болно. Мэдээжийн хэрэг, та үүнийг илүү хялбар болгож чадна: /usr/local/lib хавтас болон энэ директорт байрлах файлуудын хувьд mls/low шошго тохируулж, дараа нь суулгасан багцууд (жишээлбэл, php-ийн нэмэлт өргөтгөлүүд) хандах боломжтой болно. Энэ директор дахь номын сангууд, гэхдээ надад зөвхөн шаардлагатай файлуудад хандах хандалтыг өгөх нь дээр гэж бодож байна. Шоронг зогсоож, бүх файл дээр мл/өндөр шошго тавих:

setfmac -R mls/high /jail

Тэмдэглэгээг тохируулах үед setfmac хатуу холбоосуудтай тулгарвал процесс зогсох болно, миний жишээн дээр би дараах директоруудын хатуу холбоосыг устгасан:

/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

Шошгуудыг тохируулсны дараа apache-д зориулж mls/low шошгыг тохируулах шаардлагатай бөгөөд хамгийн түрүүнд хийх зүйл бол apache-г эхлүүлэхэд ямар файл хэрэгтэйг олж мэдэх явдал юм.

ldd /usr/local/sbin/httpd

Энэ командыг гүйцэтгэсний дараа дэлгэцэн дээр хамаарал гарч ирэх боловч эдгээр файлууд дээр шаардлагатай шошго тавих нь хангалтгүй, учир нь эдгээр файлууд байрлах сангууд нь mls/high шошготой байдаг тул эдгээр сангууд мөн шошготой байх шаардлагатай. мл/бага. Эхлэх үед apache нь түүнийг ажиллуулахад шаардлагатай файлуудыг гаргах бөгөөд php-ийн хувьд эдгээр хамаарлыг 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

Энэ жагсаалтад apache болон php хослолыг зөв ажиллуулахад шаардлагатай бүх файлд (миний жишээнд суулгасан багцуудын хувьд) mls/low хаягууд орсон байна.

Эцсийн мэдрэгч нь шоронг mls/тэнцүү түвшинд, apache-г mls/бага түвшинд ажиллуулахаар тохируулах явдал юм. Шоронг эхлүүлэхийн тулд та /etc/rc.d/jail скриптэд өөрчлөлт оруулах, энэ скрипт дэх jail_start функцийг хайж олох, тушаалын хувьсагчийг дараах маягт руу өөрчлөх хэрэгтэй.

command="setpmac mls/equal $jail_program"

setpmac команд нь бүх шошгонд хандахын тулд гүйцэтгэх файлыг шаардлагатай чадамжийн түвшинд, энэ тохиолдолд mls/equal ажиллуулдаг. Apache дээр та /usr/local/etc/rc.d/apache24 эхлүүлэх скриптийг засах хэрэгтэй. apache24_prestart функцийг өөрчлөх:

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

В албан ёсны Уг гарын авлагад өөр жишээ байгаа боловч setpmac командыг ашиглах боломжгүй гэсэн мессеж байнга ирж байсан тул би үүнийг ашиглаж чадсангүй.

дүгнэлт

Хандалтыг түгээх энэ арга нь apache-д аюулгүй байдлын нэмэлт түвшинг нэмж өгөх болно (энэ арга нь бусад стекүүдэд тохиромжтой боловч) шоронд ажилладаг бөгөөд администраторын хувьд энэ бүхэн ил тод, үл анзаарагдах болно.

Энэ нийтлэлийг бичихэд надад тусалсан эх сурвалжуудын жагсаалт:

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

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх