مقدمة
لتوفير مستوى إضافي من أمان الخادم ، يمكنك استخدام
نموذج توزيع الوصول
الإلزامي . يصف هذا المنشور كيف يمكنك تشغيل apache في السجن مع الوصول فقط إلى تلك المكونات التي تحتاج إلى وصول لكي يعمل apache و php بشكل صحيح. وفقًا لهذا المبدأ ، يمكنك تحديد ليس فقط اباتشي ، ولكن أيضًا أي مكدس آخر.
تدريب
هذه الطريقة مناسبة فقط لنظام ملفات ufs ، في هذا المثال ، سيتم استخدام zfs في النظام الرئيسي ، و ufs في السجن ، على التوالي. تتمثل الخطوة الأولى في إعادة إنشاء النواة ؛ عند تثبيت FreeBSD ، قم بتثبيت الكود المصدري.
بعد تثبيت النظام ، قم بتحرير الملف:
/usr/src/sys/amd64/conf/GENERIC
تحتاج إلى إضافة سطر واحد فقط إلى هذا الملف:
options MAC_MLS
ستهيمن العلامة / العلامة المرتفعة على الامتيازات / العلامات المنخفضة ، ولن تتمكن التطبيقات التي تعمل مع العلامة / الملامسة المنخفضة من الوصول إلى الملفات التي تحتوي على علامة / ملل عالية. يمكنك قراءة المزيد حول جميع التسميات المتاحة في نظام FreeBSD في هذا
الدليل .
بعد ذلك ، انتقل إلى الدليل / usr / src:
cd /usr/src
لبدء تجميع kernel ، قم (في المفتاح 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
إذا لم تكن هناك رغبة في إعادة بناء النواة ، فيمكنك استخدام الوحدة:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
بعد ذلك ، يمكنك إعادة تشغيل النظام بأمان. كيفية إنشاء
السجن يمكن العثور عليها في أحد منشوراتي. ولكن قبل إنشاء السجن ، تحتاج إلى إضافة قرص ثابت وإنشاء نظام ملفات عليه وتمكين multilabel عليه ، وإنشاء نظام ملفات ufs2 بحجم كتلة 64 كيلو بايت:
newfs -O 2 -b 64kb /dev/ada1 tunefs -l enable /dev/ada1
بعد إنشاء نظام الملفات وإضافة multilabel ، تحتاج إلى إضافة القرص الصلب إلى / etc / fstab ، أضف السطر إلى هذا الملف:
/dev/ada1 /jail ufs rw 0 1
في Mountpoint ، حدد الدليل الذي ستقوم بتثبيت محرك الأقراص الثابتة به ، في Pass ، تأكد من تحديد 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 والملفات الموجودة في هذا الدليل ، قم بتعيين الملونات / الملصقات المنخفضة والحزم المثبتة اللاحقة (على سبيل المثال ، ملحقات إضافية لـ php) ، ستتمكن من الوصول إلى المكتبات في هذا الدليل ، لكن يبدو لي بشكل أفضل منح حق الوصول فقط إلى تلك الملفات المطلوبة. أوقف السجن وعيّن الملصق / الملصق العالي على جميع الملفات ، للقيام بذلك ، قم بإنشاء ملف بالاسم ، على سبيل المثال ، mac وإضافة سطر واحد إليه:
touche /mac echo '.* mls/high' > /mac
بعد ذلك ، قم بتشغيل الأمر:
setfsmac -ef /mac /jail/*
بعد تعيين الملصقات ، تحتاج إلى تعيين الملصقات / الملصقات المنخفضة لـ apache (تحتاج إلى تعيين الملصقات من السجن قيد التشغيل) ، أول ما عليك فعله هو معرفة الملفات المطلوبة لتشغيل apache:
ldd /usr/local/sbin/httpd
بعد تنفيذ هذا الأمر ، سيتم عرض التبعيات على الشاشة ، لكن وضع الملصقات اللازمة على هذه الملفات لن يكون كافيًا ، لأن الدلائل التي توجد بها هذه الملفات تحمل تسمية mls / high ، لذلك تحتاج أيضًا إلى تعيين الملصق / الملصق المنخفض على هذه الدلائل. عند بدء تشغيل 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
في هذه القائمة ، يتم تعيين الملصقات / الملصقات المنخفضة لجميع الملفات الضرورية لكي تعمل حزمة apache و php بشكل صحيح (لتلك الحزم التي تم تثبيتها في مثالي).
ستكون اللمسة الأخيرة لتهيئة السجن ليتم تشغيله على مستوى ملل / مساو ، ولاباتشي على مستوى ملل / منخفض. لتشغيل السجن ، تحتاج إلى إجراء تغييرات على البرنامج النصي /etc/rc.d/jail ، والعثور على وظيفة jail_start في هذا البرنامج النصي ، وإحضار متغير الأمر إلى ما يلي:
command="setpmac mls/equal $jail_program"
يعمل أمر setpmac على تشغيل الملف القابل للتنفيذ على مستوى بيانات الاعتماد المطلوبة ، في هذه الحالة ، ملل / يساوي ، للوصول إلى جميع التسميات. في apache ، تحتاج إلى تعديل النص البرمجي start /usr/local/etc/rc.d/apache24. قم بإجراء تغييرات على وظيفة apache24_prestart:
apache24_prestart() { apache24_checkfib apache24_precmd eval "setpmac mls/low" ${command} ${apache24_flags} }
في الدليل
الرسمي ، تم توضيح مثال آخر ، لكنني لم أتمكن من استخدامه لأنني تلقيت دائمًا رسالة عن عدم القدرة على استخدام أمر setpmac.
استنتاج
ستضيف طريقة توزيع الوصول هذه مستوى إضافيًا من أمان apache (على الرغم من أن هذه الطريقة مناسبة لأي مكدس آخر) ، والذي ، بالإضافة إلى ذلك ، يعمل في السجن ، بينما بالنسبة إلى المسؤول ، سيحدث كل هذا بشفافية وليس بشكل ملحوظ.
قائمة المصادر التي ساعدتني في كتابة هذا المنشور:https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/mac.html