فری بی ایس ڈی میں لازمی حقوق کی تقسیم کا ماڈل

تعارف

سرور سیکیورٹی کی اضافی سطح فراہم کرنے کے لیے، آپ استعمال کر سکتے ہیں۔ مینڈیٹ ماڈل رسائی کی تقسیم یہ اشاعت بیان کرے گی کہ آپ جیل میں اپاچی کو صرف ان اجزاء تک کیسے چلا سکتے ہیں جن کے لیے اپاچی اور پی ایچ پی کو درست طریقے سے کام کرنے کے لیے رسائی کی ضرورت ہوتی ہے۔ اس اصول کو استعمال کرتے ہوئے، آپ نہ صرف اپاچی بلکہ کسی دوسرے اسٹیک کو بھی محدود کر سکتے ہیں۔

ٹریننگ

یہ طریقہ صرف ufs فائل سسٹم کے لیے موزوں ہے؛ اس مثال میں، zfs کو مین سسٹم میں اور ufs کو جیل میں بالترتیب استعمال کیا جائے گا۔ پہلا قدم دانا کو دوبارہ بنانا ہے؛ فری بی ایس ڈی انسٹال کرتے وقت سورس کوڈ انسٹال کریں۔
سسٹم انسٹال ہونے کے بعد، فائل میں ترمیم کریں:

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

آپ کو اس فائل میں صرف ایک لائن شامل کرنے کی ضرورت ہے:

options     MAC_MLS

ایم ایل ایس/ ہائی لیبل کی ایم ایل ایس/ لو لیبل پر غالب پوزیشن ہوگی، ایم ایل ایس/ لو لیبل کے ساتھ شروع کی جانے والی ایپلیکیشنز ان فائلوں تک رسائی حاصل نہیں کر سکیں گی جن میں ایم ایل ایس/ ہائی لیبل ہے۔ FreeBSD سسٹم میں دستیاب تمام ٹیگز کے بارے میں مزید تفصیلات اس میں مل سکتی ہیں۔ قیادت.
اگلا، /usr/src ڈائریکٹری پر جائیں:

cd /usr/src

کرنل کی تعمیر شروع کرنے کے لیے، چلائیں (j کلید میں، سسٹم میں کور کی تعداد بتائیے):

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 ماڈیول بھی شامل کرنے کی ضرورت ہے:

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۔

ایڈجسٹمنٹ

ضروری ٹیگز انسٹال کرنے سے پہلے، میں تمام ضروری پیکجز کو انسٹال کرنے کا مشورہ دیتا ہوں؛ میرے معاملے میں، ان پیکجز کو مدنظر رکھتے ہوئے ٹیگز سیٹ کیے جائیں گے:

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 لیبل سیٹ کریں اور بعد میں انسٹال کردہ پیکجز (مثال کے طور پر، php کے لیے اضافی ایکسٹینشنز) تک رسائی حاصل کر سکیں گے۔ اس ڈائریکٹری میں موجود لائبریریاں ہیں، لیکن یہ میرے لیے بہتر لگتا ہے کہ صرف ان فائلوں تک رسائی فراہم کریں جو ضروری ہیں۔ جیل بند کریں اور تمام فائلوں پر ایم ایل ایس / ہائی لیبل لگائیں:

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

لیبل سیٹ ہونے کے بعد، آپ کو اپاچی کے لیے ایم ایل ایس/لو لیبل سیٹ کرنے ہوں گے، سب سے پہلے آپ کو یہ معلوم کرنا ہوگا کہ اپاچی شروع کرنے کے لیے کن فائلوں کی ضرورت ہے:

ldd /usr/local/sbin/httpd

اس کمانڈ پر عمل کرنے کے بعد، انحصار اسکرین پر ظاہر ہوگا، لیکن ان فائلوں پر ضروری لیبل لگانا کافی نہیں ہوگا، کیونکہ جن ڈائریکٹریوں میں یہ فائلیں موجود ہیں ان میں ایم ایل ایس/ہائی لیبل موجود ہے، اس لیے ان ڈائریکٹریوں کو بھی لیبل لگانا ضروری ہے۔ ملی لیٹر/کم شروع کرنے پر، اپاچی ان فائلوں کو بھی آؤٹ پٹ کرے گا جو اسے چلانے کے لیے ضروری ہیں، اور 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 کے امتزاج کے درست آپریشن کے لیے ضروری ہیں (ان پیکجوں کے لیے جو میری مثال میں انسٹال ہیں)۔

آخری ٹچ جیل کو ایم ایل ایس/مساوی سطح پر چلانے کے لیے اور اپاچی کو ایم ایل ایس/کم سطح پر ترتیب دینا ہوگا۔ جیل شروع کرنے کے لیے، آپ کو /etc/rc.d/jail اسکرپٹ میں تبدیلیاں کرنے کی ضرورت ہے، اس اسکرپٹ میں jail_start فنکشنز تلاش کریں، کمانڈ متغیر کو فارم میں تبدیل کریں:

command="setpmac mls/equal $jail_program"

setpmac کمانڈ قابل عمل فائل کو مطلوبہ صلاحیت کی سطح پر چلاتی ہے، اس معاملے میں mls/equal، تمام لیبلز تک رسائی حاصل کرنے کے لیے۔ اپاچی میں آپ کو اسٹارٹ اپ اسکرپٹ /usr/local/etc/rc.d/apache24 میں ترمیم کرنے کی ضرورت ہے۔ apache24_prestart فنکشن کو تبدیل کریں:

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

В سرکاری دستی میں ایک اور مثال ہے، لیکن میں اسے استعمال کرنے سے قاصر تھا کیونکہ مجھے سیٹ پی میک کمانڈ استعمال کرنے سے قاصر ہونے کے بارے میں پیغام ملتا رہا۔

آؤٹ پٹ

رسائی کی تقسیم کا یہ طریقہ اپاچی میں سیکیورٹی کی ایک اضافی سطح کا اضافہ کرے گا (حالانکہ یہ طریقہ کسی دوسرے اسٹیک کے لیے موزوں ہے)، جو کہ جیل میں بھی چلتا ہے، اسی وقت، منتظم کے لیے یہ سب کچھ شفاف اور غیر توجہ کے ساتھ ہوگا۔

ان ذرائع کی فہرست جنہوں نے اس اشاعت کو لکھنے میں میری مدد کی:

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

ماخذ: www.habr.com

نیا تبصرہ شامل کریں