Правила доступа

Вся настройка LIDS делается с помощью одной программы - lidsadm. lidsadm работает в двух режимах - настройки правил доступа и ввода команд администрирования. Каждому режиму соответствует несколько параметров запуска.

Как я уже указывал, установки правил доступа находятся в файле /etc/lids/lids.conf. Изначально он не пустой. Авторы внесли туда наиболее часто используемые правила доступа. Можешь посмотреть его содержимое - все равно ничего не поймешь.:) Да оно и не надо. Файл этот просматривается и изменяется посредством lidsadm. Посмотреть установки можно с помощью команды lidsadm -L. Ты должен увидеть следующее:


LIST
Subject ACCESS TYPE Object
-----------------------------------------------------
Any File READ /sbin
Any File READ /bin
Any File READ /boot
Any File READ /lib
Any File READ /usr
Any File DENY /etc/shadow
/bin/login READ /etc/shadow
/bin/su READ /etc/shadow
Any File APPEND /var/log
Any File WRITE /var/log/wtmp
/sbin/fsck.ext2 WRITE /etc/mtab
Any File WRITE /etc/mtab
Any File WRITE /etc
/usr/sbin/sendmail WRITE /var/log/sendmail.st
/bin/login WRITE /var/log/lastlog
/bin/cat READ /home/xhg
Any File DENY /home/httpd
/usr/sbin/httpd READ /home/httpd
Any File DENY /etc/httpd/conf
/usr/sbin/httpd READ /etc/httpd/conf
/usr/sbin/sendmail WRITE /var/log/sendmail.st
/usr/X11R6/bin/XF86_SVGA NO_INHERIT RAWIO
/usr/sbin/in.ftpd READ /etc/shadow
/usr/sbin/httpd NO_INHERIT HIDDEN

Данные правила доступа прекрасно подходят для большинства случаев. Но использовать ты их не сможешь, т.к. в файле /etc/lids/lids.conf кроме имен файлов, хранятся также номера inode'ов, а они не будут совпадать с номерами inode'ов на твоей Linux-партиции.:) Информацию об inode'ах можно обновить. Делается это командой lidsadm -U. Кроме этого некоторые правила доступа неправильны. Объекты типа RAWIO и HIDDEN в данной версии не работают. Советую очистить все правила доступа и создать их заново. Очистить можно командой lidsadm -Z.

Правила доступа состоят из трех элементов: субъекта (в оригинале subject), объекта (в оригинале object) и цели (в оригинале target). Объектом является любой файл или каталог, на который и должны действовать правила доступа и защита LIDS. Если в качестве объекта указывается каталог, то все файлы в нем и вложенные каталоги с их файлами автоматически становятся объектами. Субъектом является любая защищенная программа, которой дают доступ к защищаемому объекту, т.е. прежде чем использовать программу в качестве субъекта, ее саму надо защитить средствами LIDS от посягательств, применив к ней правила доступа как к объекту. Если субъект не указан, то субъектом является любая программа. Целью является тип доступа - доступ на чтение (READ), запись (WRITE), запрет на какой-либо доступ (DENY), открытие только для дозаписи (APPEND) и игнорирование защиты (IGNORE). Не слишком замудренно?:) Покажу на примерах.

Добавление нового правила происходит по команде:


lidsadm -A -s субъект -o объект -j цель

Для начала необходимо защитить каталоги /bin, /sbin, /etc, /usr/bin, /usr/sbin, /lib, /boot определив для них доступ только на чтение всем программам.


lidsadm -A -o /bin -j READ
lidsadm -A -o /sbin -j READ
lidsadm -A -o /etc -j READ
lidsadm -A -o /usr/bin -j READ
lidsadm -A -o /usr/sbin -j READ
lidsadm -A -o /lib -j READ
lidsadm -A -o /boot -j READ

Данные настройки защитят систему от установки rootkit'а или какого другого "трояна". Но в Linux'е есть программы, которые пишут в вышеперечисленные каталоги. Например, /bin/mount, /bin/umount, /sbin/fsck.ext2 пишут в файл /etc/mtab и создают временные файлы в /etc. В каталог /etc также пишут /etc/rc.d/rc.local (создает файлы /etc/issue и /etc/issue.net) и /etc/rc.d/rc.sysinit (очищает /etc/mtab и создает /etc/HOSTNAME). Лучше закомментировать строки, отвечающие за запись в /etc в этих скриптах. Но можно и дать им доступ - хуже не будет. В каталог /lib/modules/2.2.16-5tr пишет /sbin/depmod (пересоздает /lib/modules/2.2.16-5tr/modules.dep, название каталога зависит от версии твоего ядра). Таким образом получается:


lidsadm -A -s /bin/mount -o /etc -j WRITE
lidsadm -A -s /bin/umount -o /etc -j WRITE
lidsadm -A -s /sbin/fsck.ext2 -o /etc/mtab -j WRITE
lidsadm -A -s /etc/rc.d/rc.local -o /etc -j WRITE
lidsadm -A -s /etc/rc.d/rc.sysinit -o /etc/HOSTNAME -j WRITE
lidsadm -A -s /etc/rc.d/rc.sysinit -o /etc/mtab -j WRITE
lidsadm -A -s /sbin/depmod -o /lib/modules/2.2.16-5tr -j WRITE

Естественно, я указал не все программы, которые должны иметь доступ в каталог /etc. Вычислять остальные программы я предоставляю тебе.:)

Файл /etc/shadow лучше спрятать вообще. Это защитит от кражи паролей пользователей.


lidsadm -A -o /etc/shadow -j DENY

Если оставить все так, ни один пользователь (как и сам root) не сможет зарегистрироваться в системе.:) Доступ к /etc/shadow требуют многие программы. К ним можно смело отнести /bin/login, /bin/su. Также пользователям может потребоваться доступ по ftp.


lidsadm -A -s /bin/login -o /etc/shadow -j READ
lidsadm -A -s /bin/su -o /etc/shadow -j READ
lidsadm -A -s /usr/sbin/in.ftpd -o /etc/shadow -j READ

В описании LIDS есть прекрасный пример защиты от замены головной страницы web-сервера, самой любимой шутки хакеров.:) Сначала прячем от всех и вся каталог /home/httpd:


lidsadm -A -o /home/httpd -j DENY

Затем даем демону httpd доступ на чтение на этот каталог:


lidsadm -A -s /usr/sbin/httpd -o /home/httpd -j READ

То же можно сделать и с файлами конфигурации web-сервера:


lidsadm -A -o /etc/httpd/conf -j DENY
lidsadm -A -s /usr/sbin/httpd -o /etc/httpd/conf -j READ

Неплохо было бы также защитить от изменений файлы логов. Сначала надо сделать каталог /var/log доступным только для дозаписи:


lidsadm -A -o /var/log -j APPEND

Некоторые файлы дожны быть доступны для записи:


lidsadm -A -s /bin/login -o /var/log/lastlog -j WRITE
lidsadm -A -o /var/log/wtmp -j WRITE
lidsadm -A -s /usr/sbin/sendmail -o /var/log/sendmail.st -j WRITE

Если ты пользуешься /usr/sbin/logrotate, то лучше предоставить этой программе доступ на запись ко всему каталогу:


lidsadm -A -s /usr/sbin/logrotate -o /var/log -j WRITE

В качестве объекта правил доступа может также служить способность, т.е. если ты отключил какую-то способность для всех программ, ты можешь предоставить ее какой-то определенной. Целью в данном случае могут являться - предоставлять потомкам процесса данную способность (INHERIT) или не предоставлять (NO_INHERIT). Предположим, если ты убрал способность CAP_SYS_RAWIO у всех программ, то такая способность должна быть предоставлена X-серверу, причем этой способностью не должны обладать его потомки.


lidsadm -A -s /usr/X11R6/bin/XF86_SVGA -t -o CAP_SYS_RAWIO -j NO_INHERIT

Заметь: для использования способности в качестве объекта правил доступа, должно применяться сочетание параметров -t -o, а не просто -o, как в случае с доступом к файлам.

Еще один пример: если ты отменил способность CAP_SYS_ADMIN, то она понадобиться /bin/update и ее потомкам.


lidsadm -A -s /bin/update -t -o CAP_SYS_ADMIN -j INHERIT

Существует одна способность, которая не влияет на все программы, но может предоставлена какой-то определенной - эта способность скрывать себя во время выполнения CAP_HIDDEN. Программа, имеющая такую способность не видна в списке процессов, а следовательно с ней ничего нельзя сделать.:)


lidsadm -A -s /usr/sbin/httpd -t -o CAP_HIDDEN -j NO_INHERIT
lidsadm -A -s /sbin/syslogd -t -o CAP_HIDDEN -j NO_INHERIT
lidsadm -A -s /sbin/klogd -t -o CAP_HIDDEN -j NO_INHERRIT

Таким образом в списке процессов не будет видет http-сервер, system logger и kernel logger, хотя они могут быть запущены.:)

Если какое-то правило доступа тебе уже не нужно, или оно внесено ошибочно, его можно удалить командой lidsadm -D.


lidsadm -D -s субъект -o объект -j цель

Можно указывать только субъект или только объект, в этом случае удалятся все правила, в которых встречается указанный субъект или объект. Если указан и субъект, и объект, удалится правило, в котором присутствует и указанный субъект, и указанный объект одновременно.

Это далеко не полный список правил, который должен быть. Список правил зависит от программного обеспечения, которое у тебя установлено и работает, и от тех способностей, что ты отключил. Тебе придется попотеть, прежде чем твоя система заработает должным образом.:)

Сейчас уже ты можешь перегрузить систему, после чего сможешь убедится в работоспособности системы. Если что-то пойдет не так, ты всегда сможешь загрузить Linux c выключенным LIDS. Для этого в строке ввода lilo надо указать security=0.


LILO boot: linux security=0

Также в процессе работы можно отключить LIDS и изменить любые способности и правила доступа. Об этом - в следующей главе.:)

Предыдущая

Содержание

Следующая


(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site