Вовед
За да обезбедите дополнително ниво на безбедност на серверот, можете да користите
Обука
Овој метод е погоден само за датотечен систем 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
По ова, можете безбедно да го рестартирате системот. Како да се создаде
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}
}
В
Излез
Овој метод на дистрибуција на пристап ќе додаде дополнително ниво на безбедност на apache-то (иако овој метод е погоден за кој било друг стек), кој дополнително работи во затвор, во исто време, за администраторот сето тоа ќе се случи транспарентно и незабележливо.
Список на извори кои ми помогнаа во пишувањето на оваа публикација:
Извор: www.habr.com