Giới thiệu
Để cung cấp mức độ bảo mật máy chủ bổ sung, bạn có thể sử dụng
Đào tạo
Phương pháp này chỉ phù hợp với hệ thống tập tin ufs; trong ví dụ này, zfs sẽ được sử dụng tương ứng trong hệ thống chính và ufs trong jail. Bước đầu tiên là xây dựng lại kernel; khi cài đặt FreeBSD, hãy cài đặt mã nguồn.
Sau khi hệ thống được cài đặt, hãy chỉnh sửa tệp:
/usr/src/sys/amd64/conf/GENERIC
Bạn chỉ cần thêm một dòng vào tệp này:
options MAC_MLS
Nhãn mls/nhãn cao sẽ có vị trí vượt trội so với nhãn mls/nhãn thấp, các ứng dụng sẽ được khởi chạy với nhãn mls/nhãn thấp sẽ không thể truy cập các tệp có nhãn mls/nhãn cao. Bạn có thể tìm thêm thông tin chi tiết về tất cả các thẻ có sẵn trong hệ thống FreeBSD trong phần này
Tiếp theo, vào thư mục /usr/src:
cd /usr/src
Để bắt đầu xây dựng kernel, hãy chạy (trong phím j, chỉ định số lõi trong hệ thống):
make -j 4 buildkernel KERNCONF=GENERIC
Sau khi kernel đã được biên dịch, nó phải được cài đặt:
make installkernel KERNCONF=GENERIC
Sau khi cài đặt kernel, đừng vội khởi động lại hệ thống, vì cần phải chuyển người dùng sang lớp đăng nhập đã cấu hình trước đó. Chỉnh sửa file /etc/login.conf, trong file này bạn cần chỉnh sửa class đăng nhập mặc định, đưa về dạng:
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:
Dòng :label=mls/equal sẽ cho phép người dùng là thành viên của lớp này truy cập các tệp được đánh dấu bằng bất kỳ nhãn nào (mls/low, mls/high). Sau những thao tác này, bạn cần xây dựng lại cơ sở dữ liệu và đặt người dùng root (cũng như những người cần nó) vào lớp đăng nhập này:
cap_mkdb /etc/login.conf
pw usermod root -L default
Để chính sách chỉ áp dụng cho các tệp, bạn cần chỉnh sửa tệp /etc/mac.conf, chỉ để lại một dòng trong đó:
default_labels file ?mls
Bạn cũng cần thêm mô-đun mac_mls.ko để tự động chạy:
echo 'mac_mls_load="YES"' >> /boot/loader.conf
Sau này, bạn có thể khởi động lại hệ thống một cách an toàn. Làm thế nào để tạo ra
newfs -O 2 -b 64kb /dev/ada1
tunefs -l enable /dev/ada1
Sau khi tạo hệ thống file và thêm multilabel, bạn cần thêm ổ cứng vào /etc/fstab, thêm dòng vào file này:
/dev/ada1 /jail ufs rw 0 1
Trong Mountpoint, chỉ định thư mục mà bạn sẽ gắn ổ cứng; trong Pass, hãy nhớ chỉ định 1 (ổ cứng này sẽ được kiểm tra theo trình tự nào) - điều này là cần thiết, vì hệ thống tệp ufs rất nhạy cảm với việc cắt điện đột ngột . Sau các bước này, gắn đĩa:
mount /dev/ada1 /jail
Cài đặt jail trong thư mục này. Sau khi jail đang chạy, bạn cần thực hiện các thao tác tương tự trong đó như trong hệ thống chính với người dùng và các tệp /etc/login.conf, /etc/mac.conf.
điều chỉnh
Trước khi cài đặt các thẻ cần thiết, tôi khuyên bạn nên cài đặt tất cả các gói cần thiết; trong trường hợp của tôi, các thẻ sẽ được thiết lập có tính đến các gói sau:
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
Trong ví dụ này, nhãn sẽ được đặt có tính đến sự phụ thuộc của các gói này. Tất nhiên, bạn có thể làm điều đó đơn giản hơn: đối với thư mục /usr/local/lib và các tệp nằm trong thư mục này, hãy đặt nhãn mls/low và các gói được cài đặt tiếp theo (ví dụ: các tiện ích mở rộng bổ sung cho php) sẽ có thể truy cập các thư viện trong thư mục này, nhưng có vẻ tốt hơn tôi chỉ cung cấp quyền truy cập vào những tệp cần thiết. Dừng tù và đặt mls/nhãn cao trên tất cả các tệp:
setfmac -R mls/high /jail
Khi thiết lập dấu, quá trình sẽ bị dừng nếu setfmac gặp các liên kết cứng, trong ví dụ của tôi, tôi đã xóa các liên kết cứng trong các thư mục sau:
/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
Sau khi đã đặt nhãn, bạn cần đặt nhãn mls/low cho apache, việc đầu tiên bạn cần làm là tìm hiểu xem cần có những tập tin nào để khởi động apache:
ldd /usr/local/sbin/httpd
Sau khi thực hiện lệnh này, các phần phụ thuộc sẽ được hiển thị trên màn hình, nhưng việc đặt các nhãn cần thiết trên các tệp này sẽ không đủ, vì các thư mục chứa các tệp này có nhãn mls/high, vì vậy các thư mục này cũng cần được gắn nhãn ml/thấp. Khi khởi động, Apache cũng sẽ xuất ra các tệp cần thiết để chạy nó và đối với php, những phần phụ thuộc này có thể được tìm thấy trong nhật ký 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
Danh sách này chứa các thẻ mls/low cho tất cả các tệp cần thiết cho hoạt động chính xác của tổ hợp apache và php (đối với các gói được cài đặt trong ví dụ của tôi).
Bước cuối cùng sẽ là cấu hình jail để chạy ở mức mls/bằng và apache ở mức mls/mức thấp. Để bắt đầu jail, bạn cần thực hiện các thay đổi đối với tập lệnh /etc/rc.d/jail, tìm các hàm jail_start trong tập lệnh này, thay đổi biến lệnh thành dạng:
command="setpmac mls/equal $jail_program"
Lệnh setpmac chạy tệp thực thi ở mức khả năng được yêu cầu, trong trường hợp này là mls/bằng, để có quyền truy cập vào tất cả các nhãn. Trong apache bạn cần chỉnh sửa tập lệnh khởi động /usr/local/etc/rc.d/apache24. Thay đổi hàm Apache24_prestart:
apache24_prestart() {
apache24_checkfib
apache24_precmd
eval "setpmac mls/low" ${command} ${apache24_flags}
}
В
Đầu ra
Phương pháp phân phối quyền truy cập này sẽ bổ sung thêm một mức độ bảo mật cho apache (mặc dù phương pháp này phù hợp với bất kỳ ngăn xếp nào khác), ngoài ra nó còn chạy trong tù, đồng thời, đối với quản trị viên, tất cả điều này sẽ diễn ra một cách minh bạch và không được chú ý.
Danh sách các nguồn đã giúp tôi viết ấn phẩm này:
Nguồn: www.habr.com