Giriş
Əlavə server təhlükəsizliyini təmin etmək üçün istifadə edə 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
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
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}
}
В
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ı:
Mənbə: www.habr.com