introducción
Para proporcionar un nivel adicional de seguridad del servidor, puede utilizar
Formación
Este método solo es adecuado para el sistema de archivos ufs; en este ejemplo, se usará zfs en el sistema principal y ufs en el jail, respectivamente. El primer paso es reconstruir el kernel; al instalar FreeBSD, instale el código fuente.
Una vez instalado el sistema, edite el archivo:
/usr/src/sys/amd64/conf/GENERIC
Sólo necesitas agregar una línea a este archivo:
options MAC_MLS
La etiqueta mls/high tendrá una posición dominante sobre la etiqueta mls/low, las aplicaciones que se inicien con la etiqueta mls/low no podrán acceder a los archivos que tengan la etiqueta mls/high. Se pueden encontrar más detalles sobre todas las etiquetas disponibles en el sistema FreeBSD en este
A continuación, vaya al directorio /usr/src:
cd /usr/src
Para comenzar a construir el kernel, ejecute (en la tecla j, especifique la cantidad de núcleos en el sistema):
make -j 4 buildkernel KERNCONF=GENERIC
Una vez compilado el kernel, se debe instalar:
make installkernel KERNCONF=GENERIC
Después de instalar el kernel, no se apresure a reiniciar el sistema, ya que es necesario transferir a los usuarios a la clase de inicio de sesión, habiéndolo configurado previamente. Edite el archivo /etc/login.conf, en este archivo necesita editar la clase de inicio de sesión predeterminada, llévela al 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:
La línea :label=mls/equal permitirá a los usuarios que sean miembros de esta clase acceder a archivos marcados con cualquier etiqueta (mls/low, mls/high). Después de estas manipulaciones, debe reconstruir la base de datos y colocar al usuario root (así como a aquellos que lo necesitan) en esta clase de inicio de sesión:
cap_mkdb /etc/login.conf
pw usermod root -L default
Para que la política se aplique solo a los archivos, debe editar el archivo /etc/mac.conf, dejando solo una línea en él:
default_labels file ?mls
También necesita agregar el módulo mac_mls.ko para que se ejecute automáticamente:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Después de esto, puede reiniciar el sistema de forma segura. Como crear
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Después de crear el sistema de archivos y agregar etiquetas múltiples, debe agregar el disco duro a /etc/fstab, agregar la línea a este archivo:
/dev/ada1 /jail ufs rw 0 1
En Mountpoint, especifique el directorio en el que montará el disco duro; en Pass, asegúrese de especificar 1 (en qué secuencia se verificará este disco duro); esto es necesario, ya que el sistema de archivos ufs es sensible a cortes repentinos de energía. . Después de estos pasos, monte el disco:
mount /dev/ada1 /jail
Instale jail en este directorio. Después de que se esté ejecutando el jail, debe realizar las mismas manipulaciones que en el sistema principal con los usuarios y los archivos /etc/login.conf, /etc/mac.conf.
Ajuste
Antes de instalar las etiquetas necesarias, recomiendo instalar todos los paquetes necesarios, en mi caso las etiquetas se configurarán teniendo en cuenta estos 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
En este ejemplo, las etiquetas se establecerán teniendo en cuenta las dependencias de estos paquetes. Por supuesto, puede hacerlo de manera más simple: para la carpeta /usr/local/lib y los archivos ubicados en este directorio, configure las etiquetas mls/low y los paquetes instalados posteriores (por ejemplo, extensiones adicionales para php) podrán acceder las bibliotecas en este directorio, pero me parece mejor brindar acceso solo a aquellos archivos que sean necesarios. Detenga el jail y establezca etiquetas mls/high en todos los archivos:
setfmac -R mls/high /jail
Al configurar marcas, el proceso se detendrá si setfmac encuentra enlaces físicos; en mi ejemplo, eliminé enlaces físicos en los siguientes 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
Una vez configuradas las etiquetas, debe configurar las etiquetas mls/low para Apache. Lo primero que debe hacer es averiguar qué archivos se necesitan para iniciar Apache:
ldd /usr/local/sbin/httpd
Después de ejecutar este comando, las dependencias se mostrarán en la pantalla, pero establecer las etiquetas necesarias en estos archivos no será suficiente, ya que los directorios en los que se encuentran estos archivos tienen la etiqueta mls/high, por lo que estos directorios también deben estar etiquetados. ml/bajo. Al iniciar, Apache también generará los archivos necesarios para ejecutarlo, y para PHP estas dependencias se pueden encontrar en el registro 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 contiene etiquetas mls/low para todos los archivos que son necesarios para el correcto funcionamiento de la combinación apache y php (para aquellos paquetes que están instalados en mi ejemplo).
El toque final será configurar jail para que se ejecute en el nivel mls/equal y apache en el nivel mls/low. Para iniciar jail, necesita realizar cambios en el script /etc/rc.d/jail, buscar las funciones jail_start en este script, cambiar la variable de comando al formato:
command="setpmac mls/equal $jail_program"
El comando setpmac ejecuta el archivo ejecutable en el nivel de capacidad requerido, en este caso mls/equal, para tener acceso a todas las etiquetas. En Apache necesita editar el script de inicio /usr/local/etc/rc.d/apache24. Cambie la función apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
В
conclusión
Este método de distribución de acceso agregará un nivel adicional de seguridad a Apache (aunque este método es adecuado para cualquier otra pila), que además se ejecuta en una cárcel, al mismo tiempo, para el administrador todo esto sucederá de forma transparente y imperceptible.
Lista de fuentes que me ayudaron a escribir esta publicación:
Fuente: habr.com