Настройка правил
Список правил в LIDS-е называется ACL (access control list). Как уже упоминалось выше, конфигурация LIDS-a производиться с помощью команды "lidsconf" и хранится в файле "/etc/lids/lids.conf". Не вздумайте редактировать данный файл вручную, его содержимое желательно изменять только командой
"lidsconf".
С помощью правил вы можете спрятать файлы/процессы,
разрешить доступ к ним только определенным программам и т.д., все будет зависеть от вашей фантазии. Создание правил базируется на предоставлении доступа к каким либо объектам или субъектам. В качестве объекта может выступать любая программа, файл, папка (со всеми вложенными в нее файлами), или способность, а в качестве субъекта должна выступать любая
защищенная программа (вам может показаться это все непонятным, но в последствии, я уверен, вы найдете эту технологию создания правил очень удобной). Перед тем как мы приступим к созданию правил, давайте ознакомимся с командой
"lidsconf".
Формат вызова:
lidsconf -A [-s субъект] -o объект|способность [-d] [-t от-до] [-i уровень] -j ДЕЙСТВИЕ -- позволяет добавить правило.
lidsconf -D [-s субъект] [-o объект] -- удаляет все правила в которых будут найдены указанные субъекты или объекты.
lidsconf -Z -- удаляет все правила.
lidsconf -U -- обновляет inode файлов (что это такое читайте ниже).
lidsconf -L -- показывает список всех правил
lidsconf -P -- устанавливает/изменяет пароль
Опции:
-s субъект -- указывает на субъект.
-o объект -- указывает на объект.
-d -- устанавливает правило для текущей области домена.
-I уровень -- устанавливает уровень наследования правила.
-t от-до -- позволяет установить время действия правила, время записывается в формате часы_минуты (например 2401)
-j ДЕЙСТВИЕ -- выбор действия. Есть такие варианты действий :
READONLY - только для чтения (в старых версиях нужно было указывать READ ).
WRITE - для записи и => для чтения.
APPEND - доступ только для добавления и => для чтения.
DENY - запретить какой либо доступ.
IGNORE - игнорировать все ДЕЙСТВИЯ.
GRANT - позволяет разрешить/создать способность для субъектов.
Теперь давайте приступим непосредственно к созданию правил.
По умолчанию у вас уже есть наиболее часто используемые правила, чтобы просмотреть их введите команду
# lidsconf -L. Если вы захотите их использовать, то
для начала должны будете обновить соответствующие inode
файлы, так как они на разных системах различные, и те которые указаны в файле "/etc/lids.conf", навряд ли будут соответствовать вашим. Так что вводите команду:
# lidsconf -U.
Для тех, кто не знает что такое inode, объясняю: в файловой системе ext2 inode является указателем на то место, в котором на диске размещен индексный узел файла. Inode содержит информацию
о файле, например разрешения файла, вместе с указателем на то место, где могут быть найдены данные файла, и т.д. При создании новых правил
LIDS ориентируется не только на его имя и путь к нему, но и на его inode, что позволяет обеспечить наиболее высокий уровень безопасности.
Я советую вам приняться за составление своих правил, которые бы соответствовали вашим требованиям безопасности и вашей системе. Так что удаляйте весь ACL со всеми правилами в нем:
# lidsconf -Z.
Правила обычно добавляются в той последовательности, которая представлена в данном материале.
a) В начале вы должны определить права доступа к объектам (если ниже в качестве объектов будут выступать файлы или каталоги, которых нету в вашей системе, то вам для них не надо составлять правила):
1.Только для чтения :
# lidsconf -A -o объект -j READONLY
Как упоминалось выше, в качестве объекта вы можете указать файлы, каталоги и т.д. Я предлагаю вам в качестве объектов для чтения использовать:
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
/usr/X11R6/bin
/boot
/etc/skel
/etc/modules
/etc/passwd
/etc/rc.d
/etc/sysconfig
/etc/bashrc
/etc/crontab
/lib
/usr/src/linux
если вам этот список не подходит измените его под свои требования (но при этом учтите
эти изменения при создании остальных правил).
2.Только для добавления:
# lidsconf -A -o объект -j APPEND
К этому правилу желательно отнести каталог /var/log со всеми в нем файлами логов, так как при взломе систем злоумышленники обычно затирают логи, если же вы поставите логи только на добавление, то они не смогут не чего в них изменить.
3.Запретить какой либо доступ (то есть для системы объект станет не существующим) .
# lidsconf -A -o обьект -j DENY
Не мешает отнести файл "/etc/shadow" (так как там обычно хранятся пароли в зашифрованном виде), каталог "/etc/lids" (чтобы никто не смог просмотреть настройку правил и т.д.), "/etc/lilo.conf" (обычно если у вас есть пароли на лило, то он храниться в plain-text в данном файле), "/var/www" (чтобы не кто не смог
дефейснуть ваш сайт и просматривать код CGI-сценариев и т.д.).
b) Теперь вы должны определить тип доступа для субъектов, например файл "/etc/shadow"(объект) мы спрятали от системы, но в нем нуждаются такие программы как "/bin/login", "/bin/su"(субъекты), то есть данным субъектам мы должны определить тип доступа к объекту "/etc/shadow", "Только для чтения" (READONLY), поэтому вам нужно будет ввести команды:
# lidsconf -A -s /bin/login -o /etc/shadow -i 0 -j READONLY
# lidsconf -A -s /bin/su -o /etc/shadow -i 0 -j READONLY
(опция -i указывает на количество дочерних процессов запущенных субьектом
(/bin/login и /bin/su) которые будут иметь доступ к "/etc/shadow": 0 - нету, -1 - их количество неограниченно, если вы не используете данную опцию, то их количество по умолчанию будет равняться 0).
Так же вы должны поступить со следующими программами :
Субъект | Объект | Тип доступа |
/sbin/depmod | /lib/modules/2.4.18/ modules.dep | WRITE |
/sbin/lilo | /etc/lilo.conf | READONLY |
/sbin/lidsadm | /etc/lids | READONLY |
/sbin/lilo | /boot | READONLY |
/bin/login | /var/log | IGNORE |
/usr/bin/kdm | /etc/shadow | READONLY |
/usr/bin/kdm | /var/log | IGNORE |
/etc/rc.d/rc.sysinit | /var/log | IGNORE |
/sbin/init | /var/log | WRITE |
/usr/sbin/utempter | /var/log | IGNORE |
/usr/sbin/httpd | /var/www | READONLY |
/usr/sbin/httpd | /var/log | IGNORE |
c) Завершающим действием в создании правил для LIDS-a является передача субъектам каких либо способностей, опять рассмотрим это на примере: при настройке способностей мы запретили способность в системе подгружать модули (CAP_SYS_MODULE), но некоторые команды нуждаются в ней, а именно программа "/bin/mount" и т.д., поэтому мы должны разрешить данную способность для этой программы, это можно реализовать с помощью команды
# lidsconf -A -s /bin/mount -o CAP_SYS_MODULE -i 0 -j GRANT
Таким же образом вы должны передать следующим субъектам такие способности:
Субъект | Способность |
/bin/mount | CAP_SYS_ADMIN |
/bin/mount | CAP_SYS_MODULE |
/bin/mount | CAP_SYS_RAWIO |
/bin/mount | CAP_DAC_OVERRIDE |
/bin/mount | CAP_DAC_READ_SEARCH |
/bin/umount | CAP_SYS_ADMIN |
/bin/umount | CAP_SYS_MODULE |
/bin/umount | CAP_SYS_RAWIO |
/bin/umount | CAP_DAC_READ_SEARCH |
/bin/umount | CAP_DAC_OVERRIDE |
/usr/X11R6/bin/ XF86_SVGA | CAP_SYS_RAWIO |
/sbin/mingetty | CAP_SYS_TTY_CONFIG |
/sbin/update | CAP_SYS_ADMIN |
/sbin/sysctl | CAP_SYS_ADMIN |
/usr/sbin/logrotate | CAP_DAC_READ_SEARCH |
/sbin/hwclock | CAP_SYS_TIME |
/sbin/swapon | CAP_SYS_ADMIN |
/sbin/lilo | CAP_SYS_RAWIO |
/usr/bin/kdm | CAP_SYS_RAWIO |
/usr/X11R6/bin/startx | CAP_SYS_NICE |
/bin/login | CAP_FOWNER |
/bin/login | CAP_DAC_OVERRIDE |
Все, с настройкой правил пока покончено (почему пока потом увидите). Теперь вам нужно сделать так, чтобы
LIDS инициализировался после загрузки вашей системы и всех демонов, поэтому в файл "/etc/rc.d/rc.local" добавьте такие строки:
lidsadm -I # подробнее об этой команде вы прочтете ниже
lidsconf -U # обычно если ваша система была выключена не должным образом, после ее загрузки будет запускаться программа fsch, которая проверяет ext2 раздел и изменяет inode некоторых файлов при их необходимости, поэтому некоторые правила будут не работать, поэтому мы и обновляем
inode.
Желательно добавить их где-то в середине файла, чтобы они не сильно светились.
Администрирование LIDS-a
Перед тем как перезагрузиться и запускать вашу систему с пропатченным ядром, вы должны знать, каким образом можно отключить/включить LIDS из консоли.
LIDS администрируется с помощью соответствующей команды, "lidsadm" (она уже упоминалась выше), для того чтобы воспользоваться ею вам нужно будет ввести пароль установленный вами для
LIDS-a.
Формат команды таков:
lidsadm -S -- [(+|-)LIDS_FLAG] [...] - позволяет включить/выключить определенные флаги (перечислены ниже).
lidsadm -I - позволяет инициализировать LIDS, то есть связать его с ядром (проще говоря запустить).
lidsadm -V - выводит текущее состояние флагов.
Основные флаги:
LIDS - позволяет включить/выключить LIDS на текущей консоли.
LIDS_GLOBAL - позволяет включить/выключить LIDS глобально, то есть во всей системе.
RELOAD_CONF - LIDS обращается к файлам конфигурации только 1 раз при загрузке, так что если вы после загрузки добавите какие-то правила, или разрешите/запретите какую-то способность то вам нужно будет перезапустить LIDS, для этого используется этот флаг.
Например ниже приведенная команда отключит LIDS на текущей консоли, и перезапустит LIDS с новыми правилами (если оные добавлялись):
# lidsadm -S -- -LIDS +RELOAD_GONF
Внимание! Все сообщения/ошибки/нарушения правил LIDS-a можно просмотреть в файле /var/log/messages.
Теперь вы можете смело перезагружать вашу машину и загружать ядро с LIDS-ом ...
Я больше чем уверен, что при первой загрузке LIDS не позволит запуститься половине ваших демонов/программ, и т.д., поэтому вы должны
будете создать для них соответствующие правила. Вообще трудность настройки LIDS-a состоит в том, что вы сами должны определить какие программы будут иметь доступ к определенным файлам или смогут производить определенные действия в системе, а какие нет. Также не забывайте выключить LIDS перед тем, как добавить новые правила, и перезапускать его чтобы изменения вступили в силу.
Общие советы
Для того чтобы спрятать процесс какой-то программы, вы должны передать ей способность CAP_HIDDEN:
# lidsconf -A -s /sbin/klogd -o CAP_HIDDEN -j GRANT
после чего данную прогу klogd нельзя будет увидеть в списке процессов "ps -x" и т.д.
Чем больше способностей вы запретите использовать, тем больше правил вам придется создавать, поэтому старайтесь не сильно усердствовать, запрещая их.
Обход защиты LIDS-a
Как вы уже наверное догадались, имея физический доступ к компьютеру защиту LIDS-а можно обойти, для это следует просто загрузить систему с другого ядра (вы не забыли создать загрузочную дискету про которую писалось в начале статьи?), в версиях под более старые ядра это можно было произвести еще проще, набрав при загрузке системы в LILO следующее :
boot: linux security=0
Ну зато во всем остальном LIDS, при разумной настройке, держится на высоте (а именно в обеспечении удаленной и локальной безопасности).
При его настройке вы должны стараться сделать его работу незаметной для пользователей.
Пока вроде под рассмотренную в данном материале версию LIDS-a серьезных багов не было, но зато есть ряд недочетов, которые допустили создатели LIDS-a. Если вам интересна эта информация, то подпишитесь на Maillist с их официального сайта. Чаще всего многие люди не берутся устанавливать
LIDS только из-за его трудной настройки, но мы ведь не ищем легких путей.
Сайт LIDS-a: www.lids.org
(или, если он будет в дауне, воспользуйтесь данным миррором
http://lids.gnuchina.org).
P.S. Если у вас возникнут вопросы насчет LIDS-a пишите мне, я постараюсь помочь:
lynx@xakep.ru.
Удачи!