FreeBSD-də məcburi hüquqların paylanması modeli

Giriş

Əlavə server təhlükəsizliyini təmin etmək üçün istifadə edə bilərsiniz mandat modeli giriş paylanması. Bu nəşr apache-ni yalnız apache və php-nin düzgün işləməsi üçün giriş tələb edən komponentlərə çıxışı olan bir həbsxanada necə işlədə biləcəyinizi təsvir edəcəkdir. Bu prinsipdən istifadə edərək, yalnız Apache deyil, həm də hər hansı digər yığını məhdudlaşdıra bilərsiniz.

Təlim

Bu üsul yalnız ufs fayl sistemi üçün uyğundur; bu nümunədə zfs müvafiq olaraq əsas sistemdə, ufs isə həbsxanada istifadə olunacaq. İlk addım nüvəni yenidən qurmaqdır; FreeBSD quraşdırarkən mənbə kodunu quraşdırın.
Sistem quraşdırıldıqdan sonra faylı redaktə edin:

/usr/src/sys/amd64/conf/GENERIC

Bu fayla yalnız bir sətir əlavə etməlisiniz:

options     MAC_MLS

mls/yüksək etiket mls/aşağı etiket üzərində dominant mövqeyə malik olacaq, mls/aşağı etiketi ilə işə salınacaq proqramlar mls/yüksək etiketi olan fayllara daxil ola bilməyəcək. FreeBSD sistemindəki bütün mövcud teqlər haqqında ətraflı məlumatı burada tapa bilərsiniz liderlik.
Sonra, /usr/src qovluğuna keçin:

cd /usr/src

Kernelin qurulmasına başlamaq üçün işə salın (j düyməsində sistemdəki nüvələrin sayını göstərin):

make -j 4 buildkernel KERNCONF=GENERIC

Kernel tərtib edildikdən sonra onu quraşdırmaq lazımdır:

make installkernel KERNCONF=GENERIC

Kerneli quraşdırdıqdan sonra sistemi yenidən başlatmağa tələsməyin, çünki əvvəllər onu konfiqurasiya edərək istifadəçiləri giriş sinfinə köçürmək lazımdır. /etc/login.conf faylını redaktə edin, bu faylda siz standart giriş sinfini redaktə etməlisiniz, onu formaya gətirin:

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:

:label=mls/equal sətri bu sinfin üzvü olan istifadəçilərə istənilən etiketlə (mls/aşağı, mls/yüksək) işarələnmiş fayllara daxil olmaq imkanı verəcək. Bu manipulyasiyalardan sonra verilənlər bazasını yenidən qurmalı və kök istifadəçini (həmçinin ona ehtiyacı olanları) bu giriş sinfinə yerləşdirməlisiniz:

cap_mkdb /etc/login.conf
pw usermod root -L default

Siyasətin yalnız fayllara tətbiq edilməsi üçün siz /etc/mac.conf faylını redaktə etməlisiniz və orada yalnız bir sətir buraxmalısınız:

default_labels file ?mls

Siz həmçinin autorun üçün mac_mls.ko modulunu əlavə etməlisiniz:

echo 'mac_mls_load="YES"' >> /boot/loader.conf

Bundan sonra sistemi təhlükəsiz şəkildə yenidən başlada bilərsiniz. Necə yaratmaq həbsxana Siz mənim nəşrlərimdən birində oxuya bilərsiniz. Amma həbsxana yaratmazdan əvvəl siz sabit disk əlavə etməli və onun üzərində fayl sistemi yaratmalı və onda multilabel-i aktivləşdirməlisiniz, 2 kb klaster ölçüsü olan ufs64 fayl sistemi yaratmalısınız:

newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1

Fayl sistemini yaratdıqdan və çox etiket əlavə etdikdən sonra sabit diski /etc/fstab-a əlavə etməlisiniz, bu fayla sətri əlavə edin:

/dev/ada1               /jail  ufs     rw              0       1

Mountpoint-də sabit diski quraşdıracağınız kataloqu göstərin; Pass-da 1-i göstərdiyinizə əmin olun (bu sabit disk hansı ardıcıllıqla yoxlanılacaq) - bu lazımdır, çünki ufs fayl sistemi qəfil elektrik kəsilməsinə həssasdır. . Bu addımlardan sonra diski quraşdırın:

mount /dev/ada1 /jail

Bu kataloqda jail quraşdırın. Həbsxana işə düşdükdən sonra siz əsas sistemdəki istifadəçilər və /etc/login.conf, /etc/mac.conf faylları ilə eyni manipulyasiyaları etməlisiniz.

nizamlama

Lazımi teqləri quraşdırmadan əvvəl bütün lazımi paketləri quraşdırmağı məsləhət görürəm, mənim vəziyyətimdə etiketlər bu paketlər nəzərə alınmaqla qurulacaq:

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 

Bu nümunədə etiketlər bu paketlərin asılılıqları nəzərə alınmaqla təyin olunacaq. Əlbəttə ki, bunu daha sadə edə bilərsiniz: /usr/local/lib qovluğu və bu kataloqda yerləşən fayllar üçün mls/low etiketlərini təyin edin və sonrakı quraşdırılmış paketlər (məsələn, php üçün əlavə genişləndirmələr) daxil ola biləcək. bu qovluqdakı kitabxanalar, amma mənə yalnız lazım olan fayllara girişi təmin etmək daha yaxşı görünür. Həbsxananı dayandırın və bütün fayllarda mls/yüksək etiketlər təyin edin:

setfmac -R mls/high /jail

İşarələri təyin edərkən, setfmac sərt bağlantılarla qarşılaşarsa, proses dayandırılacaq, mənim nümunəmdə aşağıdakı kataloqlardakı sərt bağlantıları sildim:

/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

Etiketlər təyin edildikdən sonra siz apache üçün mls/low etiketlərini təyin etməlisiniz, etməli olduğunuz ilk şey apache-ni işə salmaq üçün hansı faylların lazım olduğunu öyrənməkdir:

ldd /usr/local/sbin/httpd

Bu əmri yerinə yetirdikdən sonra ekranda asılılıqlar görünəcək, lakin bu fayllara lazımi etiketlərin qoyulması kifayət etməyəcək, çünki bu faylların yerləşdiyi qovluqlar mls/yüksək etiketə malikdir, ona görə də bu qovluqların da etiketlənməsi lazımdır. mls/aşağı. Başladıqda, apache onu işə salmaq üçün lazım olan faylları da çıxaracaq və php üçün bu asılılıqlar httpd-error.log jurnalında tapıla bilər.

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

Bu siyahıda apache və php birləşməsinin düzgün işləməsi üçün lazım olan bütün fayllar üçün mls/low teqləri var (mənim nümunəmdə quraşdırılmış paketlər üçün).

Son toxunuş həbsxananı mls/bərabər səviyyədə, apache isə mls/aşağı səviyyədə işləmək üçün konfiqurasiya etmək olacaq. Həbsxanaya başlamaq üçün siz /etc/rc.d/jail skriptində dəyişikliklər etməli, bu skriptdə jail_start funksiyalarını tapmalı, əmr dəyişənini forma dəyişdirməlisiniz:

command="setpmac mls/equal $jail_program"

setpmac əmri bütün etiketlərə giriş əldə etmək üçün icra edilə bilən faylı tələb olunan qabiliyyət səviyyəsində, bu halda mls/bərabər işlədir. Apache-də siz /usr/local/etc/rc.d/apache24 başlanğıc skriptini redaktə etməlisiniz. apache24_prestart funksiyasını dəyişdirin:

apache24_prestart() {
        apache24_checkfib
        apache24_precmd
        eval "setpmac mls/low" ${command} ${apache24_flags}
}

В rəsmi Təlimatda başqa bir nümunə var, lakin mən setpmac əmrindən istifadə edə bilməmək barədə mesaj aldığım üçün ondan istifadə edə bilmədim.

Buraxılış

Girişin paylanmasının bu üsulu apache-yə əlavə təhlükəsizlik səviyyəsi əlavə edəcək (baxmayaraq ki, bu üsul hər hansı digər stek üçün uyğundur), əlavə olaraq həbsxanada işləyir, eyni zamanda administrator üçün bütün bunlar şəffaf və nəzərə çarpmayacaq şəkildə baş verəcəkdir.

Bu nəşri yazmaqda mənə kömək edən mənbələrin siyahısı:

https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/mac.html

Mənbə: www.habr.com

Добавить комментарий