Модел за дистрибуција на задолжителни права во FreeBSD

Вовед

За да обезбедите дополнително ниво на безбедност на серверот, можете да користите модел на мандат дистрибуција на пристап. Оваа публикација ќе опише како можете да стартувате apache во затвор со пристап само до оние компоненти кои бараат пристап за apache и php да работат правилно. Користејќи го овој принцип, можете да го ограничите не само Apache, туку и кој било друг стек.

Обука

Овој метод е погоден само за датотечен систем ufs; во овој пример, zfs ќе се користи во главниот систем, а ufs во затвор, соодветно. Првиот чекор е повторно да го изградите кернелот; кога инсталирате FreeBSD, инсталирајте го изворниот код.
Откако ќе се инсталира системот, уредете ја датотеката:

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

Треба да додадете само една линија во оваа датотека:

options     MAC_MLS

Етикетата mls/high ќе има доминантна позиција над ознаката mls/low, апликациите што ќе се стартуваат со ознаката mls/low нема да можат да пристапат до датотеките што имаат ознака mls/high. Повеќе детали за сите достапни ознаки во системот 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). По овие манипулации, треба да ја обновите базата на податоци и да го поставите root корисникот (како и оние на кои им е потребен) во оваа класа за најавување:

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

По ова, можете безбедно да го рестартирате системот. Како да се создаде затвор Можете да го прочитате во една од моите публикации. Но, пред да креирате затвор, треба да додадете хард диск и да креирате датотечен систем на него и да овозможите мултиетикета на него, да креирате датотечен систем ufs2 со големина на кластерот од 64 kb:

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

Инсталирајте 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/high етикети на сите датотеки:

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

Откако ќе се постават етикетите, треба да ги поставите етикетите mls/low за apache, првото нешто што треба да направите е да откриете кои датотеки се потребни за да се стартува apache:

ldd /usr/local/sbin/httpd

По извршувањето на оваа команда, зависностите ќе се прикажат на екранот, но поставувањето на потребните ознаки на овие датотеки нема да биде доволно, бидејќи директориумите во кои се наоѓаат овие датотеки имаат ознака mls/high, така што овие директориуми исто така треба да бидат означени 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

Оваа листа содржи ознаки mls/low за сите датотеки кои се неопходни за правилно функционирање на комбинацијата apache и php (за оние пакети што се инсталирани во мојот пример).

Конечниот допир ќе биде да го конфигурирате jail да работи на 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

Додадете коментар