FreeBSD-ում իրավունքների բաշխման պարտադիր մոդելը

Ներածություն

Սերվերի անվտանգության լրացուցիչ մակարդակ ապահովելու համար կարող եք օգտագործել մանդատի մոդելը մուտքի բաշխում. Այս հրապարակումը նկարագրում է, թե ինչպես կարող եք apache-ն աշխատեցնել բանտում՝ մուտք ունենալով միայն այն բաղադրիչներին, որոնք մուտք են պահանջում apache-ի և php-ի ճիշտ աշխատանքի համար: Օգտագործելով այս սկզբունքը, դուք կարող եք սահմանափակել ոչ միայն Apache-ն, այլև ցանկացած այլ ստեկ:

Ուսուցում

Այս մեթոդը հարմար է միայն ufs ֆայլային համակարգի համար, այս օրինակում zfs-ը կօգտագործվի համապատասխանաբար հիմնական համակարգում, իսկ ufs-ը՝ բանտում: Առաջին քայլը միջուկը վերակառուցելն է, FreeBSD-ն տեղադրելիս տեղադրեք սկզբնական կոդը:
Համակարգը տեղադրելուց հետո խմբագրեք ֆայլը.

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

Ձեզ անհրաժեշտ է միայն մեկ տող ավելացնել այս ֆայլին.

options     MAC_MLS

mls/high label-ը գերիշխող դիրք կունենա mls/low label-ի նկատմամբ, հավելվածները, որոնք կգործարկվեն mls/low label-ով, չեն կարողանա մուտք գործել ֆայլեր, որոնք ունեն 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): Այս մանիպուլյացիաներից հետո դուք պետք է վերակառուցեք տվյալների բազան և տեղադրեք արմատային օգտվողին (ինչպես նաև նրանց, ովքեր դրա կարիքն ունեն) այս մուտքի դասում.

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

Որպեսզի քաղաքականությունը կիրառվի միայն ֆայլերի վրա, դուք պետք է խմբագրեք /etc/mac.conf ֆայլը՝ թողնելով միայն մեկ տող դրա մեջ.

default_labels file ?mls

Դուք նաև պետք է ավելացնեք mac_mls.ko մոդուլը autorun-ին.

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

Դրանից հետո դուք կարող եք ապահով կերպով վերագործարկել համակարգը: Ինչպես ստեղծել բանտ Այն կարող եք կարդալ իմ հրապարակումներից մեկում։ Բայց նախքան բանտ ստեղծելը, դուք պետք է ավելացնեք կոշտ սկավառակ և դրա վրա ստեղծեք ֆայլային համակարգ և միացնեք դրա վրա բազմակի պիտակավորումը, ստեղծեք ufs2 ֆայլային համակարգ 64 կբ կլաստերի չափով.

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 պիտակը, ուստի այս դիրեկտորիաները նույնպես պետք է պիտակվեն: մլ/ցածր: Սկսելիս 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-ի համադրության ճիշտ աշխատանքի համար (այդ փաթեթների համար, որոնք տեղադրված են իմ օրինակում):

Վերջին հպումը կլինի բանտը կարգավորելը, որպեսզի աշխատի mls/հավասար մակարդակի վրա, իսկ apache-ը՝ mls/ցածր մակարդակում: Jail-ը սկսելու համար անհրաժեշտ է փոփոխություններ կատարել /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-ին (չնայած այս մեթոդը հարմար է ցանկացած այլ stack-ի համար), որը, բացի այդ, աշխատում է բանտում, միևնույն ժամանակ, ադմինիստրատորի համար այս ամենը տեղի կունենա թափանցիկ և աննկատ:

Աղբյուրների ցանկը, որոնք օգնեցին ինձ գրել այս հրապարակումը.

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

Source: www.habr.com

Добавить комментарий