SELinux
Источник : http://www.redhat.com/magazine/001nov04/features/selinux/
SELinux - Mandatory Access Control (MAC) security system , придумана в NSA , встраивается в ядро начиная с версии 2.6 .
Традиционная , или стандартная , Unix security model известна как Discretionary Access Control (DAC).
В стандартной модели каждый процесс имеет полный контроль над своими ресурсами .
Если такая программа сохраняет какие-то временные файлы в каталог /tmp ,
ничто не мешает другой программе прочитать их .
В MAC все не так : после проверки системных пермишинов проверяются дополнительные SE-пермишины ,
и если например у такого файла стоит атрибут 0777 , то его нельзя будет ни прочитать , ни модифицировать .
В SE более персонифицированный доступ к ресурсам по сравнению с обычными юникс-пермишинами .
Например , администратор может дать отдельному приложению право только на добавление в лог-файл ,
но может запретить модифификацию этого лог-файла . Или отдельному приложению может быть дано право
на добавление других файлов в конкретном каталоге , но может быть запрещено удалять файлы из этого каталога .
В традиционном линуксе это обычно невозможно .Сетевой программе может быть разрешен доступ только на определенный порт .
domain-type model означает , что каждый процесс выполняется в защищенном домене , и каждый его ресурс - файл,
директория,сокет и т.д. - имеет собственный тип . На каждый такой тип внутри такого домена имеется набор
разрешаемых действий . В традиционном юниксе имеется команда ps , а также ряд других средств , с помощью которых
можно получить избыточную информацию о процессах . В SE такой доступ к процессам может быть ограничен .
В качестве примера можно привести /etc/shadow. В Fedora SE(Fedora Core 3) перечислены 17 доменов , имеющих доступ
к типу shadow_t , из которых только 9 имеют право записи в этот файл . Из этих 17 только 2 могут работать
в пользовательском режиме : /usr/bin/passwd и /sbin/unix_chkpwd . А в обычном линуксе любой рутовый процесс
имеет доступ к /etc/shadow.
Программы имеют свойство вызывать другие программы . Например , ничто не мешает демону DHCPD выхвать /sbin/unix_chkpwd.
В SE есть т.н. правило “transition” , в котором можно перечилить , какие приложения можно вызывать для данного домена .
Впервые SE появился в тестовом варианте на Fedora Core 2 . Наиболее полно SE реализован в Red Hat Enterprise Linux (RHEL) 4.
На будущих федорах версия SE также будет лишь частичной по сравнению с RHEL.
В SE имеется своя база данных . Она определяет варианты работы каждого приложения . Имеется набор policy из более чеи
100000 правил . Например , во 2-й федоре имеется т.н. default policy , которая работает для большинства пользователей.
Она включает набор опций , таких , как доступ пользователя к dmesg , ssh , сокетам . Эта база правил представляет
из себя файл размером 2.6 метров , который грузится в кернел-память . В 3-й федоре таких правил уже 290000 и размер
файла равен 7 метрам . Default policy для 3-й федоры включает 5000 правил и занимает 150 кб памяти .
В SE каждый процесс имеет т.н. контекст , состоящий из 3-х частей : id , роль , домен . В id обычно входит user_u ,
также может входить логин пользователя . В роль входят разрешенные для исполнения домены плюс те , которые могут
быть вызваны из них . Контекст представлен в виде строки identity:role:domain . Для системного админа контекст
выглядит так : root:sysadm_r:sysadm_t . У файла идентификатор будет тем же , что и у процесса , который его использует.
Для того чтобы посмотреть контекст файлов-директорий , нужно набрать :
ls -Z :
drwxr-xr-x root root system_u:object_r:bin_t bin
drwxr-xr-x root root system_u:object_r:boot_t boot
drwxr-xr-x root root system_u:object_r:device_t dev
drwxr-xr-x root root system_u:object_r:etc_t etc
.........
Вывод команды id :
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:user_r:user_t
Начиная с 3-й федоры , SE-файл хранится в каталоге /etc/security/selinux/X/src/policy/ . Его можно перекомпилировать
и загрузить командой
make load
При этом генерится файл
policy.YY
где YY - номер версии .
С помощью файла
/etc/selinux/config
можно определить , какую версию полиси грузить при старте системы .
В 3-й федоре версия полиси = 18 .
Отключить SE можно с помощью опции ядра
selinux=0
При загрузке SE монтируется файловая система selinuxfs в каталоге /selinux .
Версия полиси при загрузке берется при /selinux/policyvers .
Policy - это 3-й процесс , загружаемый в память - после init и kernel threads .
Контекст файлов и директорий хранится в т.н. расширенных атрибутах - XATTR , которые нечитабельны извне ядра .
Для изменения policy существует утилита system-config-securitylevel.
В каталоге /etc/selinux/X/src/policy/ есть подкаталог domains/program/ , где для каждого демона есть
соответствующий файл .te . Если вы хотите выключить этого демона и разрулить память , нужно удалить
соответствующий файл .te , после чего выполнить команду make load .
Вообще , полиси можно умудриться настроить так , что она не даст вам вообще возможности залогиниться .
Более того , если вы надумаете выключить SE путем selinux=0,а через какое-то время захотите включить ,
система начнет вести себя неадекватно . Вместо selinux=0 рекомендуется enforcing=0. Задисэблить SE
можно в файле /etc/selinux/config.
|
Тимур | Мало информации 2007-11-12 10:03:15 | kitt | Маловато, но чуть шире освещено, чем на других сайтах. Ждём еще, очень интересная тема) 2010-01-26 11:12:01 | |
|
|