Описание: Системы BSD предоставляют несколько предопределённых настроек безопасности, известных как уровни безопасности (securelevels). Кандидат должен знать на каком он уровне безопасности, можно ли поднять или опустить уровень безопасности и как.
Практика: init(8), sysctl(8),
rc.conf(5)
Замечание | |
---|---|
Данный текст прислан Дмитрием Орловым, но подвергся моей редактуре. Е.М. |
Функциональность securelevel можно рассматривать как метод защиты ядра, сырых устройств (raw devices), и файловой системы от атак злоумышленника, которому удалось взломать учётную запись суперпользователя. Защита ядра в общем случае включает в себя невозможность загрузки собственных модулей ядра и прослушивания проходящего через систему трафика. Функциональность securelevel/security присуствует во всех BSD системах с небольшими отличиями.
Уровни безопасности служат для ограничения возможностей системы до такой степени, которая соответствует её рабочему окружению (среде работы). В OpenBSD он устанавливается скриптом rc.securelevel(8):
# $OpenBSD: rc.securelevel,v 1.16 2004/07/06 04:05:03 deraadt Exp $
#
# в этом скрипте определяются действия, которые можно осуществить ДО
# того, как система перейдёт в безопасный режим. Действия, которые можно
# совершить ПОСЛЕ того, как будет определён уровень безопасности
# системы, должны помещаться в скрипт /etc/rc.local
# Здесь определяется желаемый уровень безопасности
# XXX
# XXX it is not really acceptable to put this value in a configuration
# XXX file, because locking it down requires immutability on about
# XXX 5 files instead of 2 (the kernel and init)
# XXX
securelevel=1
echo -n 'starting pre-securelevel daemons:'
#
# Сюда следует поместить ваши команды
#
echo '.'
В FreeBSD значение уровня безопасности
выставляется в файле /etc/rc.conf
:
kern_securelevel_enable="YES" kern_securelevel=1
В DragonFly BSD уровень безопасности выставляется так же как в FreeBSD, за исключением того, что переменной kern_securelevel_enable выставлять не надо.
В NetBSD уровень безопасности так же
выставляется через файл /etc/rc.conf
:
securelevel=1
Уровень безопасности может быть прочитан или установлен с помощью утиллиты sysctl(8) через переменную kern.securelevel. По окончании процесса загрузки системы вы можете узнать текущий уровень безопасности системы набрав в командной строке:
$
sysctl kern.securelevel
kern.securelevel: -1
Вы можете повысить уровень безопасности командой:
#
sysctl -w kern.securelevel=2
В процессе работы уровень безопасности системы может только повышаться. Уменьшение значения переменной ядра kern.securelevel запрещено.
Ядра OpenBSD и NetBSD предоставляют 4 уровня системной безопаности, а FreeBSD и DragonFly BSD — 5. Последний уровень в них разбит на два подуровня.
На NetBSD, в дополнении к сказанному, запрещена трассировка процесса init(8).
/dev/mem
,
/dev/kmem
и
/dev/io
.
/dev/ad0
и т.п.) в смонтированных
файловых системах доступны только для чтения
На OpenBSD, в дополнении к сказанному, действуют следующие ограничения на изменения переменных ядра:
На NetBSD, в дополнении к сказанному, действуют следующие ограничения:
идентичен уровню 1, кроме:
Наивысший уровень безопасности во FreeBSD и DragonFly BSD разбит на два уровня. Невозможность изменения правил pf(8) и NAT вынесены на уровень 3.
Режим повышенной безопасности может показаться драконовским, но он задумывался как последняя линия обороны в случае если учётная запись суперпользователя вскрыта.
Эти эффекты предотвращают обход файловых флагов путем прямой модификации сырых дисковых устройств или стирание файловой системы при помощи команды newfs(8). Далее, они могут ограничить потенциальное разрушающее действие (потенциальный вред от) вскрытого файрвола, путем запрещения модификации правил пакетного фильтра pf(8). Предотвращение перевода системного времени назад помогает при послеаварийном анализе и прибавляет уверенности в корректности журнальных файлов. При этом несколько страдает точность вычисления времени, так как блокировка времени осуществляется немгновенно.
Так как уровень безопасности может быть изменён при помощи отладчика ddb(4), вполне логично заблокировать его работу, как представлено уровнями 1 и 2 (и 3 во FreeBSD и DragonFly BSD). Это обеспечивается установкой переменных ядра ddb.console и ddb.panic в 0.
Не лишним будет упомянуть, что установку переменных на этапе
загрузки можно выполнить в конфигурационном файле
/etc/sysctl.conf
. Например:
ddb.console=0 ddb.panic=0
В разных системах семейства BSD придаётся различный смысл различным уровням безопасности. Чтобы получить конкретную информацию по вашей операционной системе, используйте следующие ссылки: