Inledning
För att ge en extra nivå av serversäkerhet kan du använda
Utbildning
Denna metod är endast lämplig för ufs-filsystemet; i det här exemplet kommer zfs att användas i huvudsystemet respektive ufs i fängelset. Det första steget är att bygga om kärnan; när du installerar FreeBSD, installera källkoden.
När systemet har installerats, redigera filen:
/usr/src/sys/amd64/conf/GENERIC
Du behöver bara lägga till en rad i den här filen:
options MAC_MLS
Etiketten mls/hög kommer att ha en dominerande ställning över etiketten mls/låg, applikationer som kommer att startas med etiketten mls/låg kommer inte att kunna komma åt filer som har etiketten mls/höga. Mer information om alla tillgängliga taggar i FreeBSD-systemet kan hittas i detta
Gå sedan till katalogen /usr/src:
cd /usr/src
För att börja bygga kärnan, kör (i j-nyckeln, ange antalet kärnor i systemet):
make -j 4 buildkernel KERNCONF=GENERIC
Efter att kärnan har kompilerats måste den installeras:
make installkernel KERNCONF=GENERIC
Efter att ha installerat kärnan, skynda inte att starta om systemet, eftersom det är nödvändigt att överföra användare till inloggningsklassen efter att ha konfigurerat den tidigare. Redigera filen /etc/login.conf, i den här filen måste du redigera standardinloggningsklassen, ta den till formuläret:
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:
Raden :label=mls/equal tillåter användare som är medlemmar i denna klass att komma åt filer som är markerade med valfri etikett (mls/low, mls/high). Efter dessa manipulationer måste du bygga om databasen och placera rotanvändaren (liksom de som behöver den) i denna inloggningsklass:
cap_mkdb /etc/login.conf
pw usermod root -L default
För att policyn endast ska gälla för filer måste du redigera filen /etc/mac.conf och bara lämna kvar en rad i den:
default_labels file ?mls
Du måste också lägga till modulen mac_mls.ko för att köra automatiskt:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Efter detta kan du säkert starta om systemet. Hur man skapar
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Efter att ha skapat filsystemet och lagt till multilabel måste du lägga till hårddisken till /etc/fstab, lägg till raden i den här filen:
/dev/ada1 /jail ufs rw 0 1
I Mountpoint, ange i vilken katalog du ska montera hårddisken; i Pass, se till att ange 1 (i vilken ordning denna hårddisk kommer att kontrolleras) - detta är nödvändigt eftersom ufs-filsystemet är känsligt för plötsliga strömavbrott . Efter dessa steg, montera disken:
mount /dev/ada1 /jail
Installera jail i den här katalogen. Efter att fängelset har körts måste du göra samma manipulationer i det som i huvudsystemet med användare och filerna /etc/login.conf, /etc/mac.conf.
justering
Innan du installerar de nödvändiga taggarna rekommenderar jag att du installerar alla nödvändiga paket; i mitt fall kommer taggarna att ställas in med hänsyn till dessa paket:
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
I det här exemplet kommer etiketter att ställas in med hänsyn till beroenden för dessa paket. Naturligtvis kan du göra det enklare: för mappen /usr/local/lib och filerna som finns i den här katalogen, ställ in mls/low-etiketterna och efterföljande installerade paket (till exempel ytterligare tillägg för php) kommer att kunna komma åt biblioteken i den här katalogen, men det verkar bättre för mig att endast ge åtkomst till de filer som är nödvändiga. Stoppa fängelse och ställ in mls/high-etiketter på alla filer:
setfmac -R mls/high /jail
När du ställer in markeringar kommer processen att stoppas om setfmac stöter på hårda länkar, i mitt exempel tog jag bort hårda länkar i följande kataloger:
/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
Efter att etiketterna har ställts in måste du ställa in mls/low-etiketterna för apache, det första du behöver göra är att ta reda på vilka filer som behövs för att starta apache:
ldd /usr/local/sbin/httpd
Efter att du har kört detta kommando kommer beroenden att visas på skärmen, men det räcker inte att ställa in de nödvändiga etiketterna på dessa filer, eftersom katalogerna där dessa filer finns har etiketten mls/high, så dessa kataloger måste också märkas mls/låg. När du startar kommer apache också att mata ut de filer som är nödvändiga för att köra den, och för php kan dessa beroenden hittas i httpd-error.log-loggen.
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
Den här listan innehåller mls/low-taggar för alla filer som är nödvändiga för korrekt funktion av kombinationen apache och php (för de paket som är installerade i mitt exempel).
Den sista handen blir att konfigurera jail att köra på mls/lika nivå och apache på mls/låg nivå. För att starta jail måste du göra ändringar i /etc/rc.d/jail-skriptet, hitta jail_start-funktionerna i det här skriptet, ändra kommandovariabeln till formen:
command="setpmac mls/equal $jail_program"
Kommandot setpmac kör den körbara filen på den nödvändiga kapacitetsnivån, i detta fall mls/equal, för att få tillgång till alla etiketter. I apache måste du redigera startskriptet /usr/local/etc/rc.d/apache24. Ändra apache24_prestart-funktionen:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
В
Utgång
Denna metod för att distribuera åtkomst kommer att lägga till en extra säkerhetsnivå till apache (även om den här metoden är lämplig för alla andra stack), som dessutom körs i ett fängelse, samtidigt, för administratören kommer allt detta att ske transparent och omärkligt.
Lista över källor som hjälpte mig att skriva denna publikation:
Källa: will.com