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

Сондай-ақ, autorun үшін 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 үшін қосымша кеңейтімдер) қол жеткізе алады. осы каталогтағы кітапханалар, бірақ маған тек қажетті файлдарға қол жеткізуді қамтамасыз еткен дұрыс сияқты. Түрмені тоқтатыңыз және барлық файлдарға 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 - млs/төмен деңгейде жұмыс істейтін етіп конфигурациялау болады. Түрмені бастау үшін /etc/rc.d/jail сценарийіне өзгертулер енгізу керек, осы сценарийдегі jail_start функцияларын табу, пәрмен айнымалы мәнін пішінге өзгерту керек:

command="setpmac mls/equal $jail_program"

setpmac пәрмені барлық белгілерге қол жеткізу үшін орындалатын файлды қажетті мүмкіндік деңгейінде іске қосады, бұл жағдайда mls/тең. 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

пікір қалдыру