FreeBSDде милдеттүү укуктарды бөлүштүрүү модели

тааныштыруу

Сервер коопсуздугунун кошумча деңгээлин камсыз кылуу үчүн, сиз колдоно аласыз мандат модели мүмкүндүк бөлүштүрүү. Бул басылма сиз Apache жана PHP туура иштеши үчүн жеткиликтүүлүктү талап кылган компоненттерге гана кирүү менен түрмөдө кантип иштете аларыңызды сүрөттөйт. Бул принципти колдонуу менен сиз 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

Ошондой эле autorun үчүн mac_mls.ko модулун кошушуңуз керек:

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

Андан кийин, сиз системаны коопсуз кайра жүктөй аласыз. Кантип түзүү керек түрмө Аны менин адабияттарымдын биринен окуй аласыз. Бирок түрмөнү түзүүдөн мурун, сиз катуу дискти кошуп, ага файлдык системаны түзүп, андагы multilabelди иштетишиңиз керек, 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 үчүн кошумча кеңейтүүлөр) кире алат. Бул каталогдогу китепканалар, бирок мен үчүн керектүү файлдарга гана мүмкүнчүлүк берген жакшы. Түрмөнү токтотуп, бардык файлдарга mls/жогорку энбелгилерди коюңуз:

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/жогорку энбелгиге ээ, ошондуктан бул каталогдор да белгилениши керек. мл/төмөн. Баштаганда, 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

Source: www.habr.com

Комментарий кошуу