Enkonduko
Por provizi plian nivelon de servila sekureco, vi povas uzi
Trejnado
Ĉi tiu metodo taŭgas nur por la ufs-dosiersistemo; en ĉi tiu ekzemplo, zfs estos uzata en la ĉefsistemo, kaj ufs en la malliberejo, respektive. La unua paŝo estas rekonstrui la kernon; instalante FreeBSD, instalu la fontkodon.
Post kiam la sistemo estas instalita, redaktu la dosieron:
/usr/src/sys/amd64/conf/GENERIC
Vi nur bezonas aldoni unu linion al ĉi tiu dosiero:
options MAC_MLS
La mls/alta etikedo havos dominan pozicion super la mls/malalta etikedo, aplikoj kiuj estos lanĉitaj kun la mls/malalta etikedo ne povos aliri dosierojn kiuj havas la mls/alta etikedo. Pliaj detaloj pri ĉiuj disponeblaj etikedoj en la FreeBSD-sistemo troveblas en ĉi tio
Poste, iru al la dosierujo /usr/src:
cd /usr/src
Por komenci konstrui la kernon, rulu (en la j-klavo, specifu la nombron da kernoj en la sistemo):
make -j 4 buildkernel KERNCONF=GENERIC
Post kiam la kerno estis kompilita, ĝi devas esti instalita:
make installkernel KERNCONF=GENERIC
Post instalo de la kerno, ne rapidu rekomenci la sistemon, ĉar necesas translokigi uzantojn al la ensaluta klaso, antaŭe agordinte ĝin. Redaktu la /etc/login.conf dosieron, en ĉi tiu dosiero vi devas redakti la defaŭltan ensalutan klason, alportu ĝin al la formo:
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:
La linio :label=mls/equal permesos al uzantoj kiuj estas membroj de ĉi tiu klaso aliri dosierojn kiuj estas markitaj per iu ajn etikedo (mls/low, mls/high). Post ĉi tiuj manipuladoj, vi devas rekonstrui la datumbazon kaj meti la radikan uzanton (same kiel tiujn, kiuj bezonas ĝin) en ĉi tiu ensaluta klaso:
cap_mkdb /etc/login.conf
pw usermod root -L default
Por ke la politiko aplikiĝu nur al dosieroj, vi devas redakti la dosieron /etc/mac.conf, lasante nur unu linion en ĝi:
default_labels file ?mls
Vi ankaŭ devas aldoni la mac_mls.ko-modulon al aŭtorun:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Post ĉi tio, vi povas sekure rekomenci la sistemon. Kiel krei
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Post krei la dosiersistemon kaj aldoni multilabel, vi devas aldoni la malmolan diskon al /etc/fstab, aldoni la linion al ĉi tiu dosiero:
/dev/ada1 /jail ufs rw 0 1
En Mountpoint, specifu la dosierujon, en kiu vi montos la malmolan diskon; en Pass, nepre specifu 1 (en kia sinsekvo ĉi tiu malmola disko estos kontrolita) - tio estas necesa, ĉar la dosiersistemo ufs estas sentema al subitaj elektroŝnuroj. . Post ĉi tiuj paŝoj, muntu la diskon:
mount /dev/ada1 /jail
Instalu malliberejon en ĉi tiu dosierujo. Post kiam la malliberejo funkcias, vi devas fari la samajn manipuladojn en ĝi kiel en la ĉefa sistemo kun uzantoj kaj la dosieroj /etc/login.conf, /etc/mac.conf.
alĝustigo
Antaŭ ol instali la necesajn etikedojn, mi rekomendas instali ĉiujn necesajn pakaĵojn; en mia kazo, la etikedoj estos fiksitaj konsiderante ĉi tiujn pakaĵojn:
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
En ĉi tiu ekzemplo, etikedoj estos fiksitaj konsiderante la dependecojn de ĉi tiuj pakoj. Kompreneble, vi povas fari ĝin pli simple: por la dosierujo /usr/local/lib kaj la dosieroj situantaj en ĉi tiu dosierujo, agordu la mls/low-etikedojn kaj postajn instalitajn pakaĵojn (ekzemple pliajn etendaĵojn por php) povos aliri. la bibliotekoj en ĉi tiu dosierujo, sed ŝajnas al mi pli bone havigi aliron nur al tiuj dosieroj kiuj estas necesaj. Ĉesu malliberejon kaj agordu mls/altajn etikedojn sur ĉiuj dosieroj:
setfmac -R mls/high /jail
Kiam fiksis markojn, la procezo estos ĉesigita se setfmac renkontas malmolajn ligilojn, en mia ekzemplo mi forigis malmolajn ligilojn en la sekvaj dosierujoj:
/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
Post kiam la etikedoj estas fiksitaj, vi devas agordi la mls/malaltajn etikedojn por apache, la unua afero, kiun vi devas fari, estas ekscii, kiajn dosierojn necesas por komenci apache:
ldd /usr/local/sbin/httpd
Post ekzekuto de ĉi tiu komando, dependecoj aperos sur la ekrano, sed agordi la necesajn etikedojn sur ĉi tiuj dosieroj ne sufiĉos, ĉar la dosierujoj en kiuj troviĝas tiuj dosieroj havas la mls/high-etikedon, do ankaŭ ĉi tiuj dosierujoj devas esti etikeditaj. mls/malalta. Komencante, apache ankaŭ eligos la dosierojn necesajn por ruli ĝin, kaj por php ĉi tiuj dependecoj troviĝas en la httpd-error.log protokolo.
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
Ĉi tiu listo enhavas mls/malaltajn etikedojn por ĉiuj dosieroj, kiuj estas necesaj por la ĝusta funkciado de la kombinaĵo apache kaj php (por tiuj pakaĵoj instalitaj en mia ekzemplo).
La fina tuŝo estos agordi malliberejon por funkcii je la mls/egala nivelo, kaj apache ĉe la mls/malalta nivelo. Por komenci malliberejon, vi devas fari ŝanĝojn al la skripto /etc/rc.d/jail, trovi la funkciojn jail_start en ĉi tiu skripto, ŝanĝi la komandan variablon al la formo:
command="setpmac mls/equal $jail_program"
La setpmac-komando rulas la plenumeblan dosieron ĉe la bezonata kapablonivelo, ĉi-kaze mls/equal, por havi aliron al ĉiuj etikedoj. En apache vi devas redakti la startskripton /usr/local/etc/rc.d/apache24. Ŝanĝu la funkcion apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
В
konkludo
Ĉi tiu metodo de disdonado de aliro aldonos plian nivelon de sekureco al apache (kvankam ĉi tiu metodo taŭgas por iu ajn alia stako), kiu krome funkcias en malliberejo, samtempe, por la administranto ĉio ĉi okazos travideble kaj nerimarkeble.
Listo de fontoj kiuj helpis min verki ĉi tiun publikaĵon:
fonto: www.habr.com