FreeBSD ۾ لازمي حقن جي تقسيم ماڊل

تعارف

سرور سيڪيورٽي جي اضافي سطح مهيا ڪرڻ لاء، توهان استعمال ڪري سگهو ٿا مينڊيٽ ماڊل رسائي جي ورڇ. هي اشاعت بيان ڪندي ته توهان ڪيئن هلائي سگهو ٿا جيل ۾ اپاچي صرف انهن حصن تائين رسائي سان جيڪي صحيح ڪم ڪرڻ لاءِ apache ۽ php تائين رسائي جي ضرورت آهي. هن اصول کي استعمال ڪندي، توهان محدود ڪري سگهو ٿا نه رڳو اپاچي، پر ڪنهن ٻئي اسٽيڪ پڻ.

جي تياري

اهو طريقو صرف ufs فائل سسٽم لاءِ موزون آهي؛ هن مثال ۾، zfs استعمال ڪيو ويندو مکيه سسٽم ۾، ۽ ufs ترتيب سان جيل ۾. پهريون قدم ڪرنل کي ٻيهر تعمير ڪرڻ آهي؛ جڏهن FreeBSD انسٽال ڪريو، سورس ڪوڊ انسٽال ڪريو.
سسٽم نصب ٿيڻ کان پوء، فائل کي تبديل ڪريو:

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

توھان کي صرف ھڪڙي لائن شامل ڪرڻ جي ضرورت آھي ھن فائل ۾:

options     MAC_MLS

mls/High ليبل کي mls/low label تي غالب پوزيشن حاصل هوندي، ايپليڪيشنون جيڪي mls/low label سان شروع ڪيون وينديون فائلن تائين رسائي نه ڪنديون جن وٽ mls/high ليبل هوندو. FreeBSD سسٽم ۾ موجود سڀني ٽيگ بابت وڌيڪ تفصيل هن ۾ ڳولهي سگهجن ٿا قيادت.
اڳيون، وڃو /usr/src ڊاريڪٽري:

cd /usr/src

ڪنيبل ٺاهڻ شروع ڪرڻ لاءِ، هلو (j key ۾، سسٽم ۾ cores جو تعداد بيان ڪريو):

make -j 4 buildkernel KERNCONF=GENERIC

دانا کي گڏ ڪرڻ کان پوء، ان کي انسٽال ڪيو وڃي:

make installkernel KERNCONF=GENERIC

ڪرنل کي انسٽال ڪرڻ کان پوءِ، سسٽم کي ريبوٽ ڪرڻ لاءِ جلدي نه ڪريو، ڇو ته ان کي اڳ ۾ ئي ترتيب ڏيڻ کان پوءِ استعمال ڪندڙن کي لاگ ان ڪلاس ۾ منتقل ڪرڻ ضروري آهي. ايڊٽ ڪريو /etc/login.conf فائل، هن فائل ۾ توهان کي ڊفالٽ لاگ ان ڪلاس کي ايڊٽ ڪرڻ جي ضرورت آهي، ان کي فارم ۾ آڻيو:

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 صارفين کي اجازت ڏيندو جيڪي هن طبقي جا ميمبر آهن انهن فائلن تائين رسائي حاصل ڪن جيڪي ڪنهن به ليبل سان نشان لڳل آهن (mls/low، mls/high). انهن ورهاڱي کان پوء، توهان کي ڊيٽابيس کي ٻيهر ٺاهڻ جي ضرورت آهي ۽ هن لاگ ان ڪلاس ۾ روٽ استعمال ڪندڙ (انهي سان گڏ انهن جي ضرورت آهي) کي رکڻو پوندو:

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

صرف فائلن تي لاڳو ڪرڻ لاءِ پاليسي لاءِ، توهان کي /etc/mac.conf فائل کي ايڊٽ ڪرڻ جي ضرورت آهي، ان ۾ صرف هڪ لائن ڇڏي:

default_labels file ?mls

توهان کي پڻ شامل ڪرڻ جي ضرورت آهي mac_mls.ko ماڊل autorun ۾:

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

ان کان پوء، توهان محفوظ طور تي سسٽم کي ريبوٽ ڪري سگهو ٿا. ڪيئن ٺاھيو جيل توهان ان کي منهنجي اشاعتن مان هڪ ۾ پڙهي سگهو ٿا. پر جيل ٺاهڻ کان اڳ، توهان کي هڪ هارڊ ڊرائيو شامل ڪرڻ جي ضرورت آهي ۽ ان تي هڪ فائيل سسٽم ٺاهيو ۽ ان تي ملٽي ليبل کي فعال ڪريو، 2kb جي ڪلسٽر سائيز سان ufs64 فائل سسٽم ٺاهيو:

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

فائل سسٽم ٺاهڻ ۽ ملٽي ليبل شامل ڪرڻ کان پوء، توهان کي هارڊ ڊرائيو شامل ڪرڻ جي ضرورت آهي /etc/fstab، هن فائل ۾ لائن شامل ڪريو:

/dev/ada1               /jail  ufs     rw              0       1

مائونٽ پوائنٽ ۾، ڊاريڪٽري بيان ڪريو جنهن ۾ توهان هارڊ ڊرائيو کي نصب ڪندا؛ پاس ۾، 1 جي وضاحت ڪرڻ جي پڪ ڪريو (ڪهڙي ترتيب ۾ هي هارڊ ڊرائيو چيڪ ڪيو ويندو) - اهو ضروري آهي، ڇو ته ufs فائل سسٽم اوچتو پاور ڪٽ جي حساس آهي. . انهن قدمن کان پوء، ڊسڪ کي نصب ڪريو:

mount /dev/ada1 /jail

هن ڊاريڪٽري ۾ جيل نصب ڪريو. جيل ھلڻ کان پوءِ، توھان کي ان ۾ ساڳيون ئي ڦيرڦار ڪرڻ جي ضرورت آھي جيئن بنيادي سسٽم ۾ صارفين ۽ فائلن سان /etc/login.conf، /etc/mac.conf.

adjustment

ضروري ٽيگ انسٽال ڪرڻ کان اڳ، مان سڀ ضروري پيڪيجز کي انسٽال ڪرڻ جي صلاح ڏيان ٿو؛ منهنجي صورت ۾، ٽيگ انهن پيڪيجز کي مدنظر رکندي سيٽ ڪيا ويندا:

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 

ھن مثال ۾، ليبل سيٽ ڪيا ويندا انھن پيڪيجز جي انحصار کي مدنظر رکندي. يقينا، توهان ان کي آسان بڻائي سگهو ٿا: /usr/local/lib فولڊر ۽ هن ڊاريڪٽري ۾ موجود فائلن لاء، سيٽ ڪريو mls/low labels ۽ بعد ۾ نصب ٿيل پيڪيجز (مثال طور، php لاء اضافي اضافو) تائين رسائي جي قابل هوندا. هن ڊاريڪٽري ۾ لائبريريون آهن، پر اهو بهتر لڳي ٿو ته مون کي صرف انهن فائلن تائين رسائي فراهم ڪريو جيڪي ضروري آهن. جيل بند ڪريو ۽ سڀني فائلن تي mls / اعلي ليبل مقرر ڪريو:

setfmac -R mls/high /jail

نشانن کي سيٽ ڪرڻ وقت، عمل کي روڪيو ويندو جيڪڏهن setfmac سخت لنڪس کي منهن ڏئي، منهنجي مثال ۾ مون هيٺ ڏنل ڊائريڪٽرن ۾ هارڊ لنڪس کي حذف ڪيو:

/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

ليبل سيٽ ٿيڻ کان پوء، توهان کي اپاچي لاء mls / گهٽ ليبل سيٽ ڪرڻ جي ضرورت آهي، پهرين شيء توهان کي ڪرڻ جي ضرورت آهي اهو معلوم ڪيو ته ڪهڙي فائلن کي اپاچي شروع ڪرڻ جي ضرورت آهي:

ldd /usr/local/sbin/httpd

هن حڪم تي عمل ڪرڻ کان پوء، انحصار اسڪرين تي ظاهر ٿيندو، پر انهن فائلن تي ضروري ليبل سيٽ ڪرڻ ڪافي نه هوندو، ڇاڪاڻ ته اهي ڊائريڪٽريون جن ۾ اهي فائلون موجود آهن انهن ۾ mls/high ليبل آهي، تنهنڪري انهن ڊائريڪٽرن کي پڻ ليبل ڪرڻ جي ضرورت آهي. mls/گهٽ. جڏهن شروع ڪندي، apache پڻ فائلن کي ٻاھر ڪڍندو جيڪي ان کي هلائڻ لاء ضروري آھن، ۽ php لاء اھي انحصار 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

ھن لسٽ ۾ سڀني فائلن لاءِ mls/low tags آھن جيڪي ضروري آھن apache ۽ php جي ميلاپ جي صحيح آپريشن لاءِ (اھي پيڪيجز لاءِ جيڪي منھنجي مثال ۾ نصب ٿيل آھن).

حتمي رابطي جيل کي ترتيب ڏيڻ لاءِ هوندو mls/برابر سطح تي، ۽ apache کي mls/گهٽ سطح تي هلائڻ لاءِ. جيل شروع ڪرڻ لاءِ، توهان کي تبديلي ڪرڻ جي ضرورت آهي /etc/rc.d/jail اسڪرپٽ، ڳوليو jail_start افعال هن اسڪرپٽ ۾، ڪمانڊ ويريبل کي فارم ۾ تبديل ڪريو:

command="setpmac mls/equal $jail_program"

setpmac حڪم ضروري قابليت جي سطح تي قابل عمل فائل کي هلائي ٿو، هن صورت ۾ mls / برابر، سڀني ليبل تائين رسائي حاصل ڪرڻ لاء. اپاچي ۾ توهان کي شروعاتي اسڪرپٽ کي تبديل ڪرڻ جي ضرورت آهي /usr/local/etc/rc.d/apache24. apache24_prestart فنڪشن کي تبديل ڪريو:

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

В سرڪاري دستي ۾ هڪ ٻيو مثال آهي، پر مان ان کي استعمال ڪرڻ کان قاصر هئس ڇاڪاڻ ته مون کي setpmac ڪمانڊ استعمال ڪرڻ جي ناڪامي بابت پيغام ملي رهيو آهي.

ٿڪل

رسائي کي ورهائڻ جو هي طريقو اپاچي ۾ سيڪيورٽي جي اضافي سطح کي شامل ڪندو (جيتوڻيڪ اهو طريقو ڪنهن ٻئي اسٽيڪ لاء مناسب آهي)، جيڪو اضافي طور تي جيل ۾ هلندو آهي، ساڳئي وقت، منتظم لاء اهو سڀ ڪجهه شفاف ۽ غير معمولي طور تي ٿيندو.

ذريعن جي فهرست جن مون کي هن اشاعت لکڻ ۾ مدد ڪئي:

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

جو ذريعو: www.habr.com

تبصرو شامل ڪريو