Sissejuhatus
Serveri täiendava turvalisuse tagamiseks võib kasutada juurdepääsu jaotamiseks. Selles väljaandes käsitletakse, kuidas käivitada apache'i jailis, milles on juurdepääs ainult neile komponentidele, mis on vajalikud apache'i ja php korrektseks töötamiseks. Selle printsiibi alusel saab piirata mitte ainult apache'i, vaid ka mistahes teist steki.
Ettevalmistus
See meetod sobib ainult ufs-failisüsteemile, antud näites kasutatakse põhitehases zfs-i ja jailis vastavalt ufs-i. Esiteks tuleb kerneli kokku panna, FreeBSD installimisel installige allikakood.
Pärast süsteemi installimist editeerige faili:
/usr/src/sys/amd64/conf/GENERIC
Sellele failile tuleb lisada vaid üks rida:
options MAC_MLS
mls/high märgis omab mls/low märgise ülekaalu, rakendused, mis töötavad mls/low märgisega, ei saa juurde pääseda failidele, mis on mls/high märgisega. Täiendavat teavet kõikide FreeBSD-s saadaval olevate märkide kohta saab lugeda antud .
Seejärel liikuge katalooge /usr/src:
cd /usr/src
Kerneli koostamise käivitamiseks täitke (j võtmes märkige süsteemis olevate tuumade arv):
make -j 4 buildkernel KERNCONF=GENERIC
Pärast kerneli koostamist on vajalik installida see:
make installkernel KERNCONF=GENERIC
Pärast kerneli installimist ärge kiirustage süsteemi taaskäivitama, kuna peate kasutajad login-k klassi viima, eelnevalt selle seadistades. Redigeerige faili /etc/login.conf, see fail peab olema edititud algklass default, viige see järgmisse vormi:
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:
Rida :label=mls/equal võimaldab kasutajatel, kes kuuluvad sellesse klassi, pääseda juurde failidele, mis on märgistatud mistahes etiketti (mls/low, mls/high). Pärast neid toiminguid tuleb andmebaas uuesti koostada ja lisada kasutaja root (ning need, kellele see on vajalik) sellesse sisselogimise klassi:
cap_mkdb /etc/login.conf
pw usermod root -L default
Kuna poliitika kehtib ainult failide kohta, tuleb redigeerida faili /etc/mac.conf, jättes sinna vaid ühe rea:
default_labels file ?mls
Samuti tuleb lisada moodul mac_mls.ko käivitamisnimekirja:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Pärast seda saab süsteemi julgelt taaskäivitada. Kuidas luua seda saab lugeda mõnest minu publikatsioonist. Kuid enne jail'i loomist tuleb lisada kõvaketas, luua sellele failisüsteem ja lubada multilabel; looge failisüsteem ufs2, mille klastr suurus on 64 kb:
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Pärast failisüsteemi loomist ja multilabel'i lisamist tuleb kõvaketas lisada /etc/fstab faili, lisage sellesse faili järgmine rida:
/dev/ada1 /jail ufs rw 0 1
Mountpoint'i all näidake katalooge, kuhu kavatsete kõvaketta mountida, ja Pass'is märkige kindlasti 1 (millises järjekorras kontrollitakse seda kõvaketast) — see on vajalik, kuna failisüsteem ufs on tundlik teravate elektrikatkestuste suhtes. Pärast neid toiminguid mountige ketas:
mount /dev/ada1 /jail
Installige jail sellesse kataloogi. Pärast jail'i tööle hakkamist tuleb seal teha samu toiminguid, mis põhissüsteemis kasutajate ja failidega /etc/login.conf, /etc/mac.conf.
Seadistamine
Enne vajalike etikettide seadmist soovitan paigaldada kõik vajalikud paketid; minu puhul märgitakse etiketid nende pakkide alusel:
mod_php73-7.3.4_1 PHP skriptikeel
php73-7.3.4_1 PHP skriptikeel
php73-ctype-7.3.4_1 ctype jagatud laiendus php jaoks
php73-curl-7.3.4_1 curl jagatud laiendus php jaoks
php73-dom-7.3.4_1 dom jagatud laiendus php jaoks
php73-extensions-1.0 "meta-port" PHP laiendite installimiseks
php73-filter-7.3.4_1 filter jagatud laiendus php jaoks
php73-gd-7.3.4_1 gd jagatud laiendus php jaoks
php73-gettext-7.3.4_1 gettext jagatud laiendus php jaoks
php73-hash-7.3.4_1 hash jagatud laiendus php jaoks
php73-iconv-7.3.4_1 iconv jagatud laiendus php jaoks
php73-json-7.3.4_1 json jagatud laiendus php jaoks
php73-mysqli-7.3.4_1 mysqli jagatud laiendus php jaoks
php73-opcache-7.3.4_1 opcache jagatud laiendus php jaoks
php73-openssl-7.3.4_1 openssl jagatud laiendus php jaoks
php73-pdo-7.3.4_1 pdo jagatud laiendus php jaoks
php73-pdo_sqlite-7.3.4_1 pdo_sqlite jagatud laiendus php jaoks
php73-phar-7.3.4_1 phar jagatud laiendus php jaoks
php73-posix-7.3.4_1 posix jagatud laiendus php jaoks
php73-session-7.3.4_1 session jagatud laiendus php jaoks
php73-simplexml-7.3.4_1 simplexml jagatud laiendus php jaoks
php73-sqlite3-7.3.4_1 sqlite3 jagatud laiendus php jaoks
php73-tokenizer-7.3.4_1 tokenizer jagatud laiendus php jaoks
php73-xml-7.3.4_1 xml jagatud laiendus php jaoks
php73-xmlreader-7.3.4_1 xmlreader jagatud laiendus php jaoks
php73-xmlrpc-7.3.4_1 xmlrpc jagatud laiendus php jaoks
php73-xmlwriter-7.3.4_1 xmlwriter jagatud laiendus php jaoks
php73-xsl-7.3.4_1 xsl jagatud laiendus php jaoks
php73-zip-7.3.4_1 zip jagatud laiendus php jaoks
php73-zlib-7.3.4_1 zlib jagatud laiendus php jaoks
apache24-2.4.39
Selles näites määratakse sildid arvesse võttes nende pakettide sõltuvusi. Tõepoolest, võiks asjad lihtsamaks teha, määrates sildid kataloogile \/usr\/local\/lib ning failidele, mis asuvad selles kataloogis, mls\/low, ning hiljem installitud paketid (nt php täiendavad laiendused) saavad sellele kataloogile ligipääsu, kuid minu arvates on parem anda ligipääs ainult neile failidele, mis on vajalikud. Peatage jail ja määrake kõikidele failidele sildid mls\/high:
setfmac -R mls\/high \/jail
Sildide määramisel peatub protsess, kui setfmac satub kõvade linkidega kokku, minu näites eemaldasin kõvad lingid järgmistest kataloogidest:
/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
Pärast siltide määramist on vajalik määrata apache'ile sildid mls\/low, esimesena tuleb välja selgitada, millised failid on apache'i käivitamiseks vajalikud:
ldd \/usr\/local\/sbin\/httpd
Pärast selle käsu täitmist kuvatakse ekraanile sõltuvused, kuid nendele failidele vajalike märgiste seadmine ei ole piisav, kuna kataloogid, kus need failid asuvad, on märgistatud mls/high, seega tuleb ka neile kataloogidele seadmiseks kasutada mls/low. Apache käivitamisel kuvab see ka failid, mis on vajalikud selle käivitamiseks, ja php sõltuvused on saadaval logifailis 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
Selles nimekirjas seatakse mls/low märgid kõikidele failidele, mis on vajalikud apache ja php koostöö korrektseks toimimiseks (kogu selle näite jaoks installitud paketid).
Viimase lihvina tuleb jail'i käivitamine seadistada mls/equal tasemel ja apache mls/low tasemel. Jail'i käivitamiseks on vajalikud muudatused skriptis /etc/rc.d/jail, leidke selle skripti funktsioon jail_start ning seadke muutuja command järgmisse vormi:
command="setpmac mls/equal $jail_program"
Käsk setpmac käivitab käitatava faili vajalikul mandaattasandil, antud juhul mls/equal, et pääseda ligi kõikidele siltidele. Apache'i puhul tuleb redigeerida käivitusskripti /usr/local/etc/rc.d/apache24. Tehke muudatused funktsioonis apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
Uues juhendis on antud teine näide, kuid ma ei suutnud seda kasutada, kuna pidevalt ilmnes teade, et käsku setpmac ei saa kasutada.
Kokkuvõte
See juurdepääsutegevuse jaotamise meetod lisab apache'ile täiendava kaitsetaseme (kuigi see meetod sobib igasse teise tehnoloogiakupli), mis muuhulgas töötab jail'is, samal ajal toimub kõike seda administraatori jaoks läbipaistvalt ja märkamatult.
Allikate loetelu, mis aitasid mul selle publikatsiooni kirjutamisel:
Allikas: habr.com
