معرفی
برای ارائه یک سطح اضافی از امنیت سرور، می توانید استفاده کنید
پرورش
این روش فقط برای سیستم فایل ufs مناسب است؛ در این مثال به ترتیب از zfs در سیستم اصلی و ufs در زندان استفاده می شود. اولین قدم بازسازی هسته است؛ هنگام نصب FreeBSD، کد منبع را نصب کنید.
پس از نصب سیستم، فایل را ویرایش کنید:
/usr/src/sys/amd64/conf/GENERIC
شما فقط باید یک خط به این فایل اضافه کنید:
options MAC_MLS
برچسب mls/high یک موقعیت غالب بر برچسب mls/low خواهد داشت، برنامههایی که با برچسب mls/low راهاندازی میشوند، نمیتوانند به فایلهایی که دارای برچسب mls/high هستند دسترسی داشته باشند. جزئیات بیشتر در مورد تمام تگ های موجود در سیستم 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 را به autorun اضافه کنید:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
پس از این، می توانید با خیال راحت سیستم را راه اندازی مجدد کنید. چگونه ایجاد کنیم
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
پس از ایجاد سیستم فایل و افزودن چند برچسب، باید هارد دیسک را به /etc/fstab اضافه کنید، خط را به این فایل اضافه کنید:
/dev/ada1 /jail ufs rw 0 1
در Mountpoint، دایرکتوری را که در آن هارد دیسک را نصب می کنید، مشخص کنید؛ در Pass، حتما 1 را مشخص کنید (در چه ترتیبی این هارد دیسک بررسی می شود) - این ضروری است، زیرا سیستم فایل ufs به قطع ناگهانی برق حساس است. . پس از این مراحل، دیسک را سوار کنید:
mount /dev/ada1 /jail
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) قادر به دسترسی خواهند بود. کتابخانه های موجود در این فهرست، اما به نظر من بهتر است فقط به آن دسته از فایل هایی که ضروری هستند دسترسی داشته باشم. زندان را متوقف کنید و برچسب های mls/high را روی همه فایل ها تنظیم کنید:
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/low را برای apache تنظیم کنید، اولین کاری که باید انجام دهید این است که بدانید چه فایل هایی برای راه اندازی apache نیاز است:
ldd /usr/local/sbin/httpd
پس از اجرای این دستور، وابستگی ها روی صفحه نمایش داده می شوند، اما تنظیم برچسب های لازم روی این فایل ها کافی نخواهد بود، زیرا دایرکتوری هایی که این فایل ها در آنها قرار دارند دارای برچسب mls/high هستند، بنابراین این دایرکتوری ها نیز باید برچسب گذاری شوند. mls/کم. هنگام راهاندازی، آپاچی فایلهای لازم برای اجرای آن را نیز خروجی میدهد، و برای 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 برای همه فایل هایی است که برای عملکرد صحیح ترکیب apache و php (برای بسته هایی که در مثال من نصب شده اند) ضروری هستند.
آخرین لمس پیکربندی زندان برای اجرا در سطح mls/برابر و apache در سطح mls/low خواهد بود. برای شروع jail، باید تغییراتی در اسکریپت /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}
}
В
نتیجه
این روش توزیع دسترسی یک سطح امنیتی اضافی را به آپاچی اضافه می کند (اگرچه این روش برای هر پشته دیگری مناسب است) که علاوه بر این در یک زندان اجرا می شود، در همان زمان، همه اینها برای مدیر به صورت شفاف و غیر قابل توجه اتفاق می افتد.
فهرست منابعی که در نوشتن این نشریه به من کمک کردند:
منبع: www.habr.com