Sissejuhatus
Serveri täiendava turvataseme tagamiseks võib kasutada juurdepääsu jaotust. Käesolevas publikatsioonis kirjeldatakse, kuidas saab käivitada apache'i vanglas, millel on juurdepääs ainult neile komponentidele, mis on vajalikud apache'i ja php korrektselt toimimiseks. Selle põhimõttega saab piirata mitte ainult apache'i, vaid ka igasuguseid muid kogumeid.
Ettevalmistus
See meetod sobib ainult ufs-failisüsteemile, antud näites kasutatakse põhissüsteemis zfs-i ja vanglas vastavalt ufs-i. Kõigepealt tuleb kerneli taas koostada, FreeBSD installimise ajal installige lähtekood.
Pärast süsteemi installimist redigeerige faili:
/usr/src/sys/amd64/conf/GENERIC
Sellesse faili tuleb lisada ainult üks rida:
options MAC_MLS
Märge mls/high omab domineerivat positsiooni märge mls/low üle, rakendused, mis käivitatakse mls/low märgiga, ei saa juurdepääsu failidele, millel on mls/high märge. Täiendava teabe saamiseks kõikide süsteemis FreeBSD saadaval olevate märgete kohta võib lugeda sellest .
Seejärel minge katalooge /usr/src:
cd /usr/src
Kerneli koostamise käivitamiseks käivitage (võtmes j määrake süsteemis olevate tuumade arv):
make -j 4 buildkernel KERNCONF=GENERIC
Pärast kärgede kokkupanekut peate selle installima:
make installkernel KERNCONF=GENERIC
Pärast kärgede installimist ärge kiirustage süsteemi taaskäivitama, sest peate kasutajad viima sisselogimisklassidesse, eelnevalt neid seadistades. Redigeerige faili /etc/login.conf, kus peate redigeerima sisselogimisklassi default, tuues selle 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 ligi failidele, mis on märgitud mis tahes etiketiga (mls/low, mls/high). Pärast neid manipuleerimisi tuleb andmebaas ümber ehitada ja kasutaja root (ning ka need, kellel seda on vaja) peab olema sellesse sisenemise klassi lisatud:
cap_mkdb /etc/login.conf
pw usermod root -L default
Et poliitika puudutaks ainult faile, tuleb redigeerida fail /etc/mac.conf, jättes sinna vaid ühe rida:
default_labels file ?mls
Samuti tuleb lisada moodul mac_mls.ko automaatkäivitusse:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Pärast seda võib julgelt süsteemi taaskäivitada. Kuidas luua saate lugeda ühes mu postitustes. Kuid enne jaili loomist on vajalik lisada kõvaketas ja luua sellele failisüsteem, samuti aktiveerida multilabel; looge failisüsteem ufs2, mille klastrite suurus on 64kb:
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Pärast failisüsteemi loomist ja multilabeli lisamist tuleb kõvaketas lisada /etc/fstab, lisage see rida sellesse faili:
/dev/ada1 /jail ufs rw 0 1
Mountpoint'i puhul märkige kaust, kuhu monteerite kõvaketta, ja Pass'i puhul märkige kindlasti 1 (kuidas kontrollitakse seda kõvaketast) — see on vajalik, kuna failisüsteem ufs on tundlik järskude elektri katkestuste suhtes. Pärast neid toiminguid monteerige ketas:
mount /dev/ada1 /jail
Installige jail sellele kaustale. Kui jail töötab, tuleb seal teha samad toimingud, mis põhissüsteemis kasutajate ja failidega /etc/login.conf, /etc/mac.conf.
Seadistamine
Enne vajalike märkide seadistamist soovitan installida kõik vajalikud paketid, minu juhul seadistatakse märkid vastavalt nendele paketidele:
mod_php73-7.3.4_1 PHP skriptimiske keel
php73-7.3.4_1 PHP skriptimiske keel
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 sessioon 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
Antud näites määratakse märgid andmepakettide sõltuvusi arvestades. Muidugi on lihtsam seada märke kaustale /usr/local/lib ja selle katalooge kuuluvatele failidele mls/low, mistõttu saavad hiljem installitud paketid (näiteks PHP täiendused) sellele kaustale juurdepääsu, kuid arvan, et oleks parem anda juurdepääs ainult vajalikutele failidele. Peatage jail ja määrake kõikidele failidele mls/high märgid:
setfmac -R mls/high /jail
Märkide määramisel peatub protsess, kui setfmac kohtab kõvasid linke; minu näites kustutasin 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 märkide määramist on vajalik määrata apache'ile mls/low märgid; kõigepealt tuleb välja selgitada, milliseid faile apache'i käivitamiseks vajalik:
ldd /usr/local/sbin/httpd
Pärast selle käsu täitmist kuvatakse ekraanil sõltuvused, kuid nendele failidele vajalike märgiste seadmine ei ole piisav, kuna kataloogid, kus need failid asuvad, omavad märgist mls/high. Seetõttu tuleb ka nendele kataloogidele seadistada märgis mls/low. Apache'i käivitamisel kuvatakse ka failid, mis on vajalikud selle käivitamiseks, ja PHP sõltuvused saab teada httpd-error.log logifailist.
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 loendis kuvatakse mls/low sildid kõigi failide jaoks, mis on vajalikud apache ja php sidumise korrektseks toimimiseks (kõigi pakettide jaoks, mis on minu näites installitud).
Viimase sammuna seadistatakse jaili käivitamine tasemel mls/equal ja apache tasemel mls/low. Jaili käivitamiseks tuleb teha muudatusi skriptis /etc/rc.d/jail, leidke antud skriptis funktsioon jail_start, muuda muutujat command järgmiseks:
command="setpmac mls/equal $jail_program"
Käsk setpmac käivitab täitmisfaili vajalikul mandaattasemel, antud juhul mls/equal, et pääseda ligi kõigile siltidele. Apache'is tuleb redigeerida käivitusskripti /usr/local/etc/rc.d/apache24. Tehke muudatus funktsioonis apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
V Käsiraamatus on teine näide, kuid ma ei suutnud seda kasutada, kuna sain pidevalt teate, et käsku setpmac ei saa kasutada.
Kokkuvõte
See sellele juurdepääsu jaotuse meetodile lisatakse apache'ile täiendav turvakiht (kuigi see sobib ka igale teisele tehnoloogiapakkumisele), mis käivitatakse samal ajal jail'is, jääb administraatorile kogu see protsess läbipaistvaks ja märkamatuks.
Allikate loetelu, mis aitasid mul selle publikatsiooni kirjutamisel:
Allikas: habr.com
