Нижеследующая демонстрация реализует защищенную среду с использованием различных MAC модулей с соответственно настроенными политиками. Используйте этот пример только для тестирования, он не предназначен для удовлетворения всех требований к защите. Реализация этих политик без понимания принципа их работы неприменима в реальных задачах.
Перед началом процесса настройки, на каждую файловую
систему необходимо установить параметр multilabel
,
который упоминался в начале этой главы. Невыполнение
этого требования приведет к ошибкам.
Начните процедуру добавлением следующего класса
пользователя к файлу
/etc/login.conf
:
и добавлением следующей строки к default классу пользователя:
После завершения этих действий, для пересборки базы данных должна быть выполнена следующая команда:
#
cap_mkdb /etc/login.conf
Добавьте к
/boot/loader.conf
следующие строки,
чтобы необходимые модули были загружены при старте
системы:
Всем учетным записям, кроме 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
:
Эта политика обеспечит безопасность путем применения ограничений на нисходящий и восходящий потоки информации в применении к каталогам и утилитам, приведенным в левой части файла.
Он может быть внесен в систему следующими командами:
#
setfsmac -ef /etc/policy.contexts /
#
setfsmac -ef /etc/policy.contexts /usr
Раскладка вышеприведенной файловой системы может быть различной для разных систем.
Файл /etc/mac.conf
требует
следующих изменений в основном разделе:
Добавьте пользователя с помощью команды
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Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.