Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 MINIX...3057 
 Solaris...2933 
 LD...2904 
 Linux Kernel 2.6...2470 
 William Gropp...2180 
 Rodriguez 6...2011 
 C++ Templates 3...1945 
 Trees...1937 
 Kamran Husain...1865 
 Secure Programming for Li...1791 
 Максвелл 5...1710 
 DevFS...1693 
 Part 3...1682 
 Stein-MacEachern-> Час...1632 
 Go Web ...1624 
 Ethreal 4...1618 
 Arrays...1606 
 Стивенс 9...1603 
 Максвелл 1...1592 
 FAQ...1538 
 
  01.01.2024 : 3621733 посещений 

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