పరిచయం
అదనపు స్థాయి సర్వర్ భద్రతను అందించడానికి, మీరు ఉపయోగించవచ్చు
శిక్షణ
ఈ పద్ధతి ufs ఫైల్ సిస్టమ్కు మాత్రమే సరిపోతుంది; ఈ ఉదాహరణలో, zfs ప్రధాన సిస్టమ్లో మరియు ufs వరుసగా జైల్లో ఉపయోగించబడుతుంది. కెర్నల్ను పునర్నిర్మించడం మొదటి దశ; FreeBSDని ఇన్స్టాల్ చేస్తున్నప్పుడు, సోర్స్ కోడ్ను ఇన్స్టాల్ చేయండి.
సిస్టమ్ ఇన్స్టాల్ చేయబడిన తర్వాత, ఫైల్ను సవరించండి:
/usr/src/sys/amd64/conf/GENERIC
మీరు ఈ ఫైల్కి ఒక పంక్తిని మాత్రమే జోడించాలి:
options MAC_MLS
mls/అధిక లేబుల్ mls/తక్కువ లేబుల్పై ఆధిపత్య స్థానాన్ని కలిగి ఉంటుంది, mls/తక్కువ లేబుల్తో ప్రారంభించబడే అప్లికేషన్లు 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
దీని తరువాత, మీరు సిస్టమ్ను సురక్షితంగా రీబూట్ చేయవచ్చు. ఎలా సృష్టించాలి
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/తక్కువ లేబుల్లను సెట్ చేయండి మరియు తదుపరి ఇన్స్టాల్ చేయబడిన ప్యాకేజీలను (ఉదాహరణకు, 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
లేబుల్లు సెట్ చేయబడిన తర్వాత, మీరు apache కోసం mls/తక్కువ లేబుల్లను సెట్ చేయాలి, మీరు చేయాల్సిన మొదటి విషయం ఏమిటంటే apacheని ప్రారంభించడానికి ఏ ఫైల్లు అవసరమో తెలుసుకోవడం:
ldd /usr/local/sbin/httpd
ఈ ఆదేశాన్ని అమలు చేసిన తర్వాత, డిపెండెన్సీలు స్క్రీన్పై ప్రదర్శించబడతాయి, అయితే ఈ ఫైల్లపై అవసరమైన లేబుల్లను సెట్ చేయడం సరిపోదు, ఎందుకంటే ఈ ఫైల్లు ఉన్న డైరెక్టరీలు mls/హై లేబుల్ని కలిగి ఉంటాయి, కాబట్టి ఈ డైరెక్టరీలను కూడా లేబుల్ చేయాలి. 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
ఈ జాబితాలో apache మరియు php కలయిక యొక్క సరైన ఆపరేషన్ కోసం అవసరమైన అన్ని ఫైల్ల కోసం mls/తక్కువ ట్యాగ్లు ఉన్నాయి (నా ఉదాహరణలో ఇన్స్టాల్ చేయబడిన ప్యాకేజీల కోసం).
జైలును mls/సమాన స్థాయిలో మరియు అపాచీని 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}
}
В
తీర్మానం
యాక్సెస్ని పంపిణీ చేసే ఈ పద్ధతి అపాచీకి అదనపు స్థాయి భద్రతను జోడిస్తుంది (ఈ పద్ధతి ఏదైనా ఇతర స్టాక్కి అనుకూలంగా ఉంటుంది), ఇది అదనంగా జైలులో నడుస్తుంది, అదే సమయంలో, నిర్వాహకుడికి ఇవన్నీ పారదర్శకంగా మరియు గుర్తించబడకుండా జరుగుతాయి.
ఈ ప్రచురణను వ్రాయడంలో నాకు సహాయపడిన మూలాధారాల జాబితా:
మూలం: www.habr.com