Нижеследующая демонстрация реализует защищенную среду с использованием различных MAC модулей с соответственно настроенными политиками. Используйте этот пример только для тестирования, он не предназначен для удовлетворения всех требований к защите. Реализация этих политик без понимания принципа их работы неприменима в реальных задачах.
Перед началом процесса настройки, на каждую файловую систему необходимо установить параметр multilabel, который упоминался в начале этой главы. Невыполнение этого требования приведет к ошибкам.
Начните процедуру добавлением следующего класса пользователя к файлу /etc/login.conf:
insecure:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin :manpath=/usr/share/man /usr/local/man:\ :nologin=/usr/sbin/nologin:\ :cputime=1h30m:\ :datasize=8M:\ :vmemoryuse=100M:\ :stacksize=2M:\ :memorylocked=4M:\ :memoryuse=8M:\ :filesize=8M:\ :coredumpsize=8M:\ :openfiles=24:\ :maxproc=32:\ :priority=0:\ :requirehome:\ :passwordtime=91d:\ :umask=022:\ :ignoretime@:\ :label=partition/13,mls/5:
и добавлением следующей строки к default классу пользователя:
:label=mls/equal,biba/equal,partition/equal:
После завершения этих действий, для пересборки базы данных должна быть выполнена следующая команда:
# cap_mkdb /etc/login.conf
Добавьте к /boot/loader.conf следующие строки, чтобы необходимые модули были загружены при старте системы:
mac_biba_load="YES" mac_mls_load="YES" mac_seeotheruids_load="YES" mac_partition_load="YES"
Всем учетным записям, кроме root или системных пользователей теперь потребуется присвоить класс (login class). При отсутствии класса пользователи не смогут получить доступа к обычным командам, таким как vi(1). Следующий скрипт sh сделает все необходимое:
# for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \ /etc/passwd`; do pw usermod $x -L insecure; done;
После этого изменения необходимо запустить команду cap_mkdb на файле /etc/master.passwd.
Должен быть создан файл контекста; следующий пример взят из примера политики от Robert Watson, он может быть помещен в /etc/policy.contexts:
# This is the default BIBA/MLS policy for this system. .* biba/high,mls/high /sbin/dhclient biba/high(low),mls/high(low) /dev(/.*)? biba/equal,mls/equal # This is not an exhaustive list of all "privileged" devices. /dev/mdctl biba/high,mls/high /dev/pci biba/high,mls/high /dev/k?mem biba/high,mls/high /dev/io biba/high,mls/high /dev/agp.* biba/high,mls/high (/var)?/tmp(/.*)? biba/equal,mls/equal /tmp/\.X11-unix biba/high(equal),mls/high(equal) /tmp/\.X11-unix/.* biba/equal,mls/equal /proc(/.*)? biba/equal,mls/equal /mnt.* biba/low,mls/low (/usr)?/home biba/high(low),mls/high(low) (/usr)?/home/.* biba/low,mls/low /var/mail(/.*)? biba/low,mls/low /var/spool/mqueue(/.*)? biba/low,mls/low (/mnt)?/cdrom(/.*)? biba/high,mls/high (/usr)?/home/(ftp|samba)(/.*)? biba/high,mls/high /var/log/sendmail\.st biba/low,mls/low /var/run/utmp biba/equal,mls/equal /var/log/(lastlog|wtmp) biba/equal,mls/equal
Эта политика обеспечит безопасность путем применения ограничений на нисходящий и восходящий потоки информации в применении к каталогам и утилитам, приведенным в левой части файла.
Он может быть внесен в систему следующими командами:
# setfsmac -ef /etc/policy.contexts / # setfsmac -ef /etc/policy.contexts /usr
Замечание: Раскладка вышеприведенной файловой системы может быть различной для разных систем.
Файл /etc/mac.conf требует следующих изменений в основном разделе:
default_labels file ?biba,?mls default_labels ifnet ?biba,?mls default_labels process ?biba,?mls,?partition default_labels socket ?biba,?mls
Добавьте пользователя с помощью команды adduser и поместите его в класс insecure для этих тестов.
В примерах ниже тестирование root и обычных пользователей будет смешиваться; форма приглашения поможет различить этих пользователей.
% getpmac biba/15(15-15),mls/15(15-15),partition/15 # setpmac partition/15,mls/equal top
Замечание: Процесс top будет уничтожен перед тем, как мы запустим другой процесс top.
% ps Zax biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.03 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1101 #C: R+ 0:00.01 ps Zax
Просмотр процессов всех других пользователей должен быть запрещен.
Отключите политику MAC seeotheruids для остальных тестов:
# sysctl security.mac.seeotheruids.enabled=0 % ps Zax LABEL PID TT STAT TIME COMMAND biba/equal(low-high),mls/equal(low-high),partition/15 1122 #C: S+ 0:00.02 top biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.05 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1123 #C: R+ 0:00.01 ps Zax
Все пользователи должны видеть каждый процесс в своем разделе (partition).
# setpmac partition/15,mls/equal,biba/high\(high-high\) top % ps Zax LABEL PID TT STAT TIME COMMAND biba/high(high-high),mls/equal(low-high),partition/15 1251 #C: S+ 0:00.02 top biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.06 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1157 #C: R+ 0:00.00 ps Zax
Политика Biba позволяет чтение объектов с более высокими метками.
# setpmac partition/15,mls/equal,biba/low top % ps Zax LABEL PID TT STAT TIME COMMAND biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S 0:00.07 -su (bash) biba/15(15-15),mls/15(15-15),partition/15 1226 #C: R+ 0:00.01 ps Zax
Политика Biba не позволяет чтение объектов с более низкими метками; тем не менее, MLS разрешает это.
% ifconfig bge0 | grep maclabel maclabel biba/low(low-low),mls/low(low-low) % ping -c 1 192.0.34.166 PING 192.0.34.166 (192.0.34.166): 56 data bytes ping: sendto: Permission denied
Пользователи не могут выполнить ping на example.com, или на любой домен по этой причине.
Для устранения этой ошибки, запустите следующую команду:
# sysctl security.mac.biba.trust_all_interfaces=1
Она устанавливает метку интерфейса по умолчанию в незащищенный режим, так что политика Biba по умолчанию не будет применена.
# ifconfig bge0 maclabel biba/equal\(low-high\),mls/equal\(low-high\) % ping -c 1 192.0.34.166 PING 192.0.34.166 (192.0.34.166): 56 data bytes 64 bytes from 192.0.34.166: icmp_seq=0 ttl=50 time=204.455 ms --- 192.0.34.166 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/stddev = 204.455/204.455/204.455/0.000 ms
Установив более корректную метку, мы можем использовать ping.
Теперь создадим файлы для процедуры тестирования чтения и записи:
# touch test1 test2 test3 test4 test5 # getfmac test1 test1: biba/equal,mls/equal # setfmac biba/low test1 test2; setfmac biba/high test4 test5; \ setfmac mls/low test1 test3; setfmac mls/high test2 test4 # setfmac mls/equal,biba/equal test3 && getfmac test? test1: biba/low,mls/low test2: biba/low,mls/high test3: biba/equal,mls/equal test4: biba/high,mls/high test5: biba/high,mls/equal # chown testuser:testuser test?
Все эти файлы должны принадлежать пользователю testuser. Тесты на чтение:
% ls test1 test2 test3 test4 test5 % ls test? ls: test1: Permission denied ls: test2: Permission denied ls: test4: Permission denied test3 test5
Доступ на чтение не должен быть разрешен для пар: (biba/low,mls/low), (biba/low,mls/high) и (biba/high,mls/high). Теперь несколько тестов на запись:
% for i in `echo test*`; do echo 1 > $i; done -su: test1: Permission denied -su: test4: Permission denied -su: test5: Permission denied
Подобно тестам на чтение, доступ на запись должен быть запрещен для пар: (biba/low,mls/high) и (biba/equal,mls/equal).
% cat test? cat: test1: Permission denied cat: test2: Permission denied 1 cat: test4: Permission denied
А теперь от root:
# cat test2 1
Пред. | Начало | След. |
Модуль MAC LOMAC | Уровень выше | Другой пример: Использование MAC для защиты веб сервера |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.