FreeBSD'de zorunlu hak dağıtım modeli

Giriş

Ek düzeyde sunucu güvenliği sağlamak için şunları kullanabilirsiniz: yetki modeli erişim dağıtımı. Bu yayında Apache'yi hapishanede, yalnızca Apache ve PHP'nin düzgün çalışması için erişim gerektiren bileşenlere erişimle nasıl çalıştırabileceğiniz anlatılacaktır. Bu prensibi kullanarak yalnızca Apache'yi değil diğer yığınları da sınırlayabilirsiniz.

Eğitim

Bu yöntem sadece ufs dosya sistemi için uygundur; bu örnekte sırasıyla ana sistemde zfs, hapishanede ufs kullanılacaktır. İlk adım çekirdeği yeniden oluşturmaktır; FreeBSD'yi kurarken kaynak kodunu yükleyin.
Sistem kurulduktan sonra dosyayı düzenleyin:

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

Bu dosyaya yalnızca bir satır eklemeniz gerekir:

options     MAC_MLS

mls/high etiketi, mls/low etiketine baskın konumda olacak, mls/low etiketiyle açılacak uygulamalar, mls/high etiketine sahip dosyalara erişemeyecektir. FreeBSD sistemindeki mevcut tüm etiketler hakkında daha fazla ayrıntıyı burada bulabilirsiniz. liderlik.
Daha sonra /usr/src dizinine gidin:

cd /usr/src

Çekirdeği oluşturmaya başlamak için şunu çalıştırın (j tuşunda sistemdeki çekirdek sayısını belirtin):

make -j 4 buildkernel KERNCONF=GENERIC

Çekirdek derlendikten sonra kurulması gerekir:

make installkernel KERNCONF=GENERIC

Çekirdeği kurduktan sonra, sistemi yeniden başlatmak için acele etmeyin, çünkü kullanıcıları daha önce yapılandırdıktan sonra oturum açma sınıfına aktarmak gerekir. /etc/login.conf dosyasını düzenleyin, bu dosyada varsayılan giriş sınıfını düzenlemeniz ve forma getirmeniz gerekir:

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 satırı, bu sınıfın üyesi olan kullanıcıların herhangi bir etiketle (mls/low, mls/high) işaretlenmiş dosyalara erişmesine olanak tanır. Bu manipülasyonlardan sonra, veritabanını yeniden oluşturmanız ve kök kullanıcıyı (ve buna ihtiyaç duyanları) bu oturum açma sınıfına yerleştirmeniz gerekir:

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

Politikanın yalnızca dosyalara uygulanabilmesi için /etc/mac.conf dosyasını, içinde yalnızca bir satır bırakarak düzenlemeniz gerekir:

default_labels file ?mls

Ayrıca otomatik çalıştırmaya mac_mls.ko modülünü de eklemeniz gerekir:

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

Bundan sonra sistemi güvenle yeniden başlatabilirsiniz. Nasıl oluşturulurum hapis Bunu yayınlarımdan birinde okuyabilirsiniz. Ancak jail oluşturmadan önce, bir sabit sürücü ekleyip üzerinde bir dosya sistemi oluşturup üzerinde çoklu etiketi etkinleştirmeniz, 2kb küme boyutunda bir ufs64 dosya sistemi oluşturmanız gerekir:

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

Dosya sistemini oluşturup çoklu etiketi ekledikten sonra, sabit sürücüyü /etc/fstab dizinine eklemeniz, satırı bu dosyaya eklemeniz gerekir:

/dev/ada1               /jail  ufs     rw              0       1

Mountpoint'te, sabit sürücüyü bağlayacağınız dizini belirtin; Pass'ta, 1'i belirttiğinizden emin olun (bu sabit sürücünün hangi sırayla kontrol edileceği) - ufs dosya sistemi ani elektrik kesintilerine karşı duyarlı olduğundan bu gereklidir. . Bu adımlardan sonra diski bağlayın:

mount /dev/ada1 /jail

Bu dizine jail'i yükleyin. Hapishane çalıştırıldıktan sonra, ana sistemdeki kullanıcılarla ve /etc/login.conf, /etc/mac.conf dosyalarıyla aynı manipülasyonları yapmanız gerekir.

Ayar

Gerekli etiketleri kurmadan önce gerekli tüm paketleri kurmanızı öneririm; benim durumumda etiketler şu paketler dikkate alınarak ayarlanacaktır:

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 örnekte etiketler bu paketlerin bağımlılıkları dikkate alınarak ayarlanacaktır. Elbette bunu daha basit bir şekilde yapabilirsiniz: /usr/local/lib klasörü ve bu dizinde bulunan dosyalar için mls/low etiketlerini ayarlayın ve ardından yüklenen paketlere (örneğin, php için ek uzantılar) erişebileceksiniz. Bu dizindeki kütüphaneler, ancak bana sadece gerekli olan dosyalara erişim sağlamak daha iyi görünüyor. Hapishaneyi durdurun ve tüm dosyalara mls/yüksek etiketleri ayarlayın:

setfmac -R mls/high /jail

İşaretleri ayarlarken setfmac sabit bağlantılarla karşılaşırsa işlem durdurulacaktır; örneğimde aşağıdaki dizinlerdeki sabit 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

Etiketler ayarlandıktan sonra apache için mls/low etiketlerini ayarlamanız gerekir, yapmanız gereken ilk şey apache'yi başlatmak için hangi dosyaların gerekli olduğunu bulmaktır:

ldd /usr/local/sbin/httpd

Bu komutu çalıştırdıktan sonra bağımlılıklar ekrana gelecektir ancak bu dosyaların bulunduğu dizinler mls/high etiketine sahip olduğundan bu dosyalar üzerinde gerekli etiketleri ayarlamak yeterli olmayacaktır, dolayısıyla bu dizinlerin de etiketlenmesi gerekir. ml/düşük. Apache, başlatıldığında onu çalıştırmak için gerekli dosyaların çıktısını da alacaktır ve php için bu bağımlılıklar httpd-error.log günlüğünde bulunabilir.

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 liste, apache ve php kombinasyonunun doğru çalışması için gerekli olan tüm dosyalar için mls/low etiketlerini içerir (benim örneğimde yüklü olan paketler için).

Son dokunuş, jail'i mls/equal düzeyinde ve apache'yi mls/low düzeyinde çalışacak şekilde yapılandırmak olacaktır. Hapishaneyi başlatmak için /etc/rc.d/jail betiğinde değişiklik yapmanız, bu betikte jail_start işlevlerini bulmanız, komut değişkenini şu şekilde değiştirmeniz gerekir:

command="setpmac mls/equal $jail_program"

setpmac komutu, tüm etiketlere erişim sağlamak için yürütülebilir dosyayı gerekli yetenek düzeyinde (bu durumda mls/equal) çalıştırır. Apache'de /usr/local/etc/rc.d/apache24 başlangıç ​​betiğini düzenlemeniz gerekir. Apache24_prestart işlevini değiştirin:

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

В resmi Kılavuzda başka bir örnek daha var ancak setpmac komutunun kullanılamadığına dair mesaj almaya devam ettiğim için kullanamadım.

Aviator apk

Erişimi dağıtmanın bu yöntemi, apache'ye ek bir güvenlik düzeyi ekleyecektir (ancak bu yöntem diğer yığınlar için uygundur), ayrıca hapishanede çalışır, aynı zamanda yönetici için tüm bunlar şeffaf ve fark edilmeden gerçekleşecektir.

Bu yayını yazmamda bana yardımcı olan kaynakların listesi:

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

Kaynak: habr.com

Yorum ekle