Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

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