Правила доступа
Вся настройка 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 и изменить любые способности и правила доступа. Об этом - в следующей главе.:) [Назад][Содержание][Вперед] |