Modela belavkirina mafên mecbûrî di FreeBSD de

Pîrozbahiyê

Ji bo peydakirina astek zêde ya ewlehiya serverê, hûn dikarin bikar bînin modela erkê belavkirina gihîştinê. Ev weşan dê rave bike ka hûn çawa dikarin apache-yê di zindanê de bi rêve bibin ku tenê bigihîjin wan hêmanên ku ji bo ku apache û php rast bixebitin hewce ne ku bigihîjin. Bi karanîna vê prensîbê, hûn dikarin ne tenê Apache, lê her weha her stackek din jî sînordar bikin.

Amadekirin

Ev rêbaz tenê ji bo pergala pelê ufs-ê maqûl e; di vê nimûneyê de, zfs dê di pergala sereke de, û ufs di girtîgehê de, bi rêzdarî were bikar anîn. Pêngava yekem ji nû ve avakirina kernelê ye; Dema ku FreeBSD saz bikin, koda çavkaniyê saz bikin.
Piştî ku pergalê saz kirin, pelê biguherînin:

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

Hûn tenê hewce ne ku rêzek li vê pelê zêde bikin:

options     MAC_MLS

Etîketa mls/bilind dê li ser etîketa mls/kêm xwedî pozîsyonek serdest be, sepanên ku dê bi etîketa mls/kêm werin destpêkirin dê nikaribin bigihîjin pelên ku xwedî etîketa mls/bilind in. Zêdetir hûrgulî li ser hemî etîketên berdest ên di pergala FreeBSD de di vê de têne dîtin birêvebirî.
Piştre, biçin pelrêça /usr/src:

cd /usr/src

Ji bo ku hûn dest bi avakirina kernelê bikin, bixebitin (di bişkojka j-yê de, di pergalê de hejmara navokan diyar bikin):

make -j 4 buildkernel KERNCONF=GENERIC

Piştî ku kernel hate berhev kirin, divê were saz kirin:

make installkernel KERNCONF=GENERIC

Piştî sazkirina kernelê, lez nekin ku pergalê ji nû ve bidin destpêkirin, ji ber ku pêdivî ye ku bikarhêneran veguhezînin pola têketinê, ku berê wê mîheng kiriye. Pelê /etc/login.conf biguherîne, di vê pelê de hûn hewce ne ku çîna têketinê ya xwerû biguherînin, wê bînin forma:

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:

Rêza :label=mls/equal dê bihêle ku bikarhênerên ku endamên vê polê ne bigihîjin pelên ku bi her etîketê hatine nîşankirin (mls/kêm, mls/bilind). Piştî van manipulasyonan, hûn hewce ne ku databasê ji nû ve ava bikin û bikarhênerê root (û her weha yên ku jê re hewce ne) di vê çîna têketinê de bi cih bikin:

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

Ji bo ku polîtîka tenê li ser pelan bicîh bibe, hûn hewce ne ku pelê /etc/mac.conf biguherînin, tenê yek rêzek tê de bihêlin:

default_labels file ?mls

Di heman demê de hûn hewce ne ku modula mac_mls.ko li otomatê zêde bikin:

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

Piştî vê yekê, hûn dikarin bi ewlehî pergalê ji nû ve saz bikin. Çawa çêbikin girtîgehê Hûn dikarin wê di yek ji weşanên min de bixwînin. Lê berî ku hûn girtîgehek çêbikin, hûn hewce ne ku dîskek hişk lê zêde bikin û li ser wê pergalek pelê biafirînin û li ser wê multilabel çalak bikin, pergalek pelê ufs2 bi mezinahiya koma 64kb biafirînin:

newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1

Piştî afirandina pergala pelan û lê zêdekirina multilabel, hûn hewce ne ku dîska hişk li /etc/fstab zêde bikin, rêzê li vê pelê zêde bikin:

/dev/ada1               /jail  ufs     rw              0       1

Di Mountpoint de, pelrêça ku hûn ê dîska hişk lê siwar bikin diyar bikin; Di Pass de, pê ewle bin ku 1 diyar bikin (di kîjan rêzê de dê ev dîska hişk were kontrol kirin) - ev pêdivî ye, ji ber ku pergala pelê ufs ji qutkirina hêzê ya ji nişka ve hesas e. . Piştî van gavan, dîskê siwar bikin:

mount /dev/ada1 /jail

Di vê pelrêçê de zindanê saz bikin. Piştî ku girtîgeh dimeşe, hûn hewce ne ku di wê de heman manîpulasyonên ku di pergala sereke de bi bikarhêneran û pelan re bikin /etc/login.conf, /etc/mac.conf.

ligorî

Berî sazkirina etîketên pêwîst, ez pêşniyar dikim ku hemî pakêtên pêwîst saz bikin; di rewşa min de, etîket dê li gorî van pakêtan werin danîn:

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 

Di vê nimûneyê de, etîket dê li gorî girêdanên van pakêtan werin danîn. Bê guman, hûn dikarin wê hêsantir bikin: ji bo peldanka /usr/local/lib û pelên ku di vê pelrêçayê de cih digirin, etîketên mls/kêm û pakêtên sazkirî yên paşîn (mînakî, pêvekên din ên ji bo php) dê karibin bigihîjin pirtûkxaneyên di vê pelrêçayê de, lê ji min re çêtir xuya dike ku tenê bi wan pelên ku hewce ne bigihîjin. Girtîgehê rawestînin û li ser hemî pelan etîketên mls/bilind saz bikin:

setfmac -R mls/high /jail

Dema ku nîşanan danîne, ger setfmac bi girêdanên dijwar re rû bi rû bimîne, pêvajo dê were sekinandin, di mînaka xwe de min girêdanên hişk di pelrêçên jêrîn de jêbirin:

/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

Piştî ku etîket hatin danîn, hûn hewce ne ku etîketên mls/kêm ji bo apache saz bikin, yekem tiştê ku divê hûn bikin ev e ku hûn fêr bibin ka ji bo destpêkirina apache çi pelan hewce ne:

ldd /usr/local/sbin/httpd

Piştî cîbicîkirina vê fermanê, dê girêdayî li ser ekranê werin xuyang kirin, lê danîna etîketên pêwîst li ser van pelan dê têrê neke, ji ber ku pelrêçiyên ku ev pel tê de ne, nîşana mls/high hene, ji ber vê yekê jî pêdivî ye ku ev pelrêç jî bêne nîşankirin. mls/kêm. Dema ku dest pê dike, apache dê pelên ku ji bo xebitandina wê hewce ne jî derxîne, û ji bo php-ê ev girêdan dikarin di têketina httpd-error.log de werin dîtin.

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

Di vê navnîşê de ji bo hemî pelên ku ji bo xebata rast a kombînasyona apache û php-ê hewce ne (ji bo wan pakêtên ku di mînaka min de hatine saz kirin) tagên mls / kêm vedihewîne.

Têkiliya paşîn dê mîhengkirina zindanê be ku di asta mls / wekhev de, û apache di asta mls / nizm de bixebite. Ji bo destpêkirina zindanê, hûn hewce ne ku di skrîpta /etc/rc.d/jail de guhertinan bikin, fonksiyonên jail_start di vê skrîptê de bibînin, guhêrbara fermanê bi formê biguherînin:

command="setpmac mls/equal $jail_program"

Fermana setpmac pelê îcrakar di asta kapasîteya pêwîst de dimeşîne, di vê rewşê de mls/wekhev, da ku bigihîje hemî etîketan. Di apache de hûn hewce ne ku skrîpta destpêkê /usr/local/etc/rc.d/apache24 biguherînin. Fonksiyona apache24_prestart biguherînin:

apache24_prestart() {
        apache24_checkfib
        apache24_precmd
        eval "setpmac mls/low" ${command} ${apache24_flags}
}

В fermî Manual mînakek din heye, lê min nekarî wê bikar bînim ji ber ku min bi berdewamî peyamek di derbarê nekaranîna fermana setpmac de distîne.

encamê

Ev rêbaza belavkirina gihîştinê dê astek ewlehiyê ya din li apache zêde bike (tevî ku ev rêbaz ji bo stûnek din guncan e), ku ji bilî vê yekê di zindanê de dimeşe, di heman demê de, ji bo rêveberê ev hemî dê bi zelalî û bêhiş çêbibin.

Navnîşa çavkaniyên ku di nivîsandina vê weşanê de alîkariya min kirin:

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

Source: www.habr.com

Add a comment