Introdución
Para proporcionar un nivel adicional de seguridade do servidor, pode usar
Adestramento
Este método só é adecuado para o sistema de ficheiros ufs; neste exemplo, zfs empregarase no sistema principal e ufs no cárcere, respectivamente. O primeiro paso é reconstruír o núcleo; ao instalar FreeBSD, instale o código fonte.
Despois de instalar o sistema, edite o ficheiro:
/usr/src/sys/amd64/conf/GENERIC
Só precisa engadir unha liña a este ficheiro:
options MAC_MLS
A etiqueta mls/high terá unha posición dominante sobre a etiqueta mls/low, as aplicacións que se lanzarán coa etiqueta mls/low non poderán acceder aos ficheiros que teñan a etiqueta mls/high. Aquí pódense atopar máis detalles sobre todas as etiquetas dispoñibles no sistema FreeBSD
A continuación, vai ao directorio /usr/src:
cd /usr/src
Para comezar a construír o núcleo, execute (na tecla j, especifique o número de núcleos do sistema):
make -j 4 buildkernel KERNCONF=GENERIC
Despois de compilar o núcleo, debe instalarse:
make installkernel KERNCONF=GENERIC
Despois de instalar o núcleo, non se apresure a reiniciar o sistema, xa que é necesario transferir os usuarios á clase de inicio de sesión, tendo configurado previamente. Edite o ficheiro /etc/login.conf, neste ficheiro cómpre editar a clase de inicio de sesión predeterminada, traelo ao formulario:
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:
A liña :label=mls/equal permitirá aos usuarios que sexan membros desta clase acceder aos ficheiros marcados con calquera etiqueta (mls/low, mls/high). Despois destas manipulacións, cómpre reconstruír a base de datos e colocar o usuario root (así como os que o precisen) nesta clase de inicio de sesión:
cap_mkdb /etc/login.conf
pw usermod root -L default
Para que a política se aplique só aos ficheiros, cómpre editar o ficheiro /etc/mac.conf, deixando só unha liña:
default_labels file ?mls
Tamén cómpre engadir o módulo mac_mls.ko para a execución automática:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Despois diso, pode reiniciar o sistema con seguridade. Como crear
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Despois de crear o sistema de ficheiros e engadir multilabel, cómpre engadir o disco duro a /etc/fstab, engadir a liña a este ficheiro:
/dev/ada1 /jail ufs rw 0 1
En Mountpoint, especifique o directorio no que vai montar o disco duro; en Pass, asegúrese de especificar 1 (en que secuencia se comprobará este disco duro): isto é necesario, xa que o sistema de ficheiros ufs é sensible aos cortes de enerxía repentinos. . Despois destes pasos, monte o disco:
mount /dev/ada1 /jail
Instala jail neste directorio. Despois de que o cárcere estea funcionando, cómpre facer nela as mesmas manipulacións que no sistema principal cos usuarios e cos ficheiros /etc/login.conf, /etc/mac.conf.
axuste
Antes de instalar as etiquetas necesarias, recomendo instalar todos os paquetes necesarios; no meu caso, as etiquetas estableceranse tendo en conta estes paquetes:
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
Neste exemplo, estableceranse etiquetas tendo en conta as dependencias destes paquetes. Por suposto, pode facelo máis sinxelo: para o cartafol /usr/local/lib e os ficheiros que se atopan neste directorio, estableza as etiquetas mls/low e os paquetes instalados posteriores (por exemplo, extensións adicionais para php) poderán acceder as bibliotecas deste directorio, pero paréceme mellor proporcionar acceso só a aqueles ficheiros que sexan necesarios. Detén o cárcere e establece etiquetas mls/high en todos os ficheiros:
setfmac -R mls/high /jail
Ao establecer marcas, o proceso pararase se setfmac atopa ligazóns duras, no meu exemplo eliminei as ligazóns físicas nos seguintes directorios:
/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
Despois de establecer as etiquetas, cómpre configurar as etiquetas mls/low para apache, o primeiro que debes facer é descubrir que ficheiros son necesarios para iniciar o apache:
ldd /usr/local/sbin/httpd
Despois de executar este comando, aparecerán as dependencias na pantalla, pero non será suficiente establecer as etiquetas necesarias nestes ficheiros, xa que os directorios nos que se atopan estes ficheiros teñen a etiqueta mls/high, polo que tamén hai que etiquetar estes directorios. ml/baixo. Ao iniciar, apache tamén mostrará os ficheiros necesarios para executalo, e para php estas dependencias pódense atopar no rexistro 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
Esta lista contén etiquetas mls/low para todos os ficheiros que son necesarios para o correcto funcionamento da combinación apache e php (para aqueles paquetes que están instalados no meu exemplo).
O toque final será configurar o cárcere para que se execute no nivel mls/equal e apache no nivel mls/baixo. Para iniciar o cárcere, cómpre facer cambios no script /etc/rc.d/jail, buscar as funcións jail_start neste script, cambiar a variable de comando ao formulario:
command="setpmac mls/equal $jail_program"
O comando setpmac executa o ficheiro executable no nivel de capacidade necesario, neste caso mls/equal, para ter acceso a todas as etiquetas. En apache necesitas editar o script de inicio /usr/local/etc/rc.d/apache24. Cambia a función apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
В
Saída
Este método de distribución do acceso engadirá un nivel adicional de seguridade a apache (aínda que este método é apto para calquera outra pila), que ademais se executa nun cárcere, ao mesmo tempo, para o administrador todo isto sucederá de forma transparente e imperceptible.
Lista de fontes que me axudaron a escribir esta publicación:
Fonte: www.habr.com