Product SiteDocumentation Site

Глава 4. Целевая политика Targeted

4.1. Ограниченные процессы
4.2. Неограниченные процессы
4.3. Ограниченные и Неограниченные Пользователи
Целевая политика targeted - это политика, используемая в Fedora по умолчанию. Когда целевая политика targeted используется, процессы, которые являются целевыми, запускаются в ограниченном домене, остальные процессы запускаются в неограниченном домене. Например, по умолчанию пользователи, прошедшие авторизацию, работают в домене unconfined_t и системные процессы запущенные init-ом запускаются в домене initrc_t - оба домена неограниченные.
Неограниченные домены (так же, как и ограниченные) - это субъекты для операций выполнения и записи в память. По умолчанию, субъекты запущенные в неограниченном домене не могут выделить память для записи и выполнить операции. Это уменьшает степень угрозы атаки переполнения буфера buffer overflow attacks. Эти проверки памяти отключаются установкой Булевых переключателей, что позволяет изменять политику SELinux "на ходу". Настройка Булевых значений рассматривается позже.

4.1. Ограниченные процессы

Почти каждая сетевая служба ограничена в Fedora. Также большинство процессов, которые запускаются в Linux с привелигиями пользователя root и выполняют задачи для пользователей, такие как приложение passwd, ограничены. Когда процесс ограничен, он запускается в своём собственном домене, например процесс httpd запускается в домене httpd_t. Если ограниченный процесс скомпрометирован атакующим, в зависимости от конфигурации SELinux, доступ атакующего к ресурсам и вред, который он может нанести ограничен.
В следующем примере демонстрируется как SELinux предотвращает Apache HTTP Server (httpd) от чтения файлов, которые не промаркированы корректно, такие как файлы используемые Samba. Данный пример не рекомендуется использовать в продуктивных средах. Подразумевается, что пакеты httpd, wget, setroubleshoot-server, dbus и audit установлены, и используется целевая политика SELinux targeted, SELinux запущен в принудительном enforcing режиме:
  1. Для того, чтобы убедиться, что SELinux включен в принудительном режиме с целевой политикой, необходимо выполнить команду sestatus
    $ /usr/sbin/sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 24
    Policy from config file:        targeted
    
    Значение SELinux status: enabled возвращается, когда SELinux включен. Значение Current mode: enforcing возвращается, когда SELinux запущен в принудительном режиме. Значение Policy from config file: targeted возвращается, если используется целевая политика SELinux targeted.
  2. От имени пользователя Linux root выполните команду touch /var/www/html/testfile для создания файла.
  3. Выполните команду ls -Z /var/www/html/testfile для просмотра контекста SELinux:
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile
    
    По умолчанию в Fedora пользователи Linux работают неограниченными (unconfined), поэтому файл testfile помечен пользователем SELinux unconfined_u. RBAC используется только для процессов, для файлов не используется. Роли не имеют значения для файлов - роль object_r является универсальной для файлов (на постоянно подключенных хранилищах или сетевых файловых системах). В директории /proc/ файлы, относящиеся к процессам, могу использовать роль system_r.[6]. Тип httpd_sys_content_t разрешает процессу httpd получить доступ к этому файлу.
  4. От имени пользователя Lnux root выполните команду service httpd start для запуска процесса httpd Вывод команды показан ниже, если httpd запустился успешно:
    # /sbin/service httpd start
    Starting httpd:                                            [  OK  ]
    
  5. Перейдите в каталог, где у вашего Linux пользователя есть права на запись, и выполните команду wget http://localhost/testfile. Если в конфигурацию по умолчанию не внесены изменения, то это команда выполнится успешно:
    --2009-11-06 17:43:01--  http://localhost/testfile
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 0 [text/plain]
    Saving to: `testfile'
    
    [ <=>                              ] 0     --.-K/s   in 0s
    		
    2009-11-06 17:43:01 (0.00 B/s) - `testfile' saved [0/0]
    
  6. Команда chcon перемаркирует файлы; однако такие изменения не сохраняются, когда файловая система перемаркируется. Для внесения постоянных сохраняющихся изменений используется команда semanage, которая обсуждается позже. От имени пользователя root выполните следующую команду для изменения типа на тип, используемый Samba:
    chcon -t samba_share_t /var/www/html/testfile
    Выполните команду ls -Z /var/www/html/testfile для просмотра внесенных изменений:
    -rw-r--r--  root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
    
  7. Примечание: текущие разрешения DAC разрешают процессу httpd получить доступ к файлу testfile. Перейдите в директорию, где у вашего пользователя есть права на запись и выполните команду wget http://localhost/testfile. Если в конфигурацию по умолчанию не внесены измнения, то команда завершится с ошибкой:
    --2009-11-06 14:11:23--  http://localhost/testfile
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 403 Forbidden
    2009-11-06 14:11:23 ERROR 403: Forbidden.
    
  8. От имени пользователя root, выполните команду rm -i /var/www/html/testfile для удаления testfile.
  9. Если нет необходимости в запущенном httpd, то от имени пользователя root выполните команду service httpd stop для остановки httpd:
    # /sbin/service httpd stop
    Stopping httpd:                                            [  OK  ]
    
Дополнительные настрйоки безопасности добавленные в SELinux показаны на примере. Несмотря на то, что правила DAC разрешают процессу httpd доступ к testfile используемому в шаге 7, так как файл маркирован типо, к которому процесс httpd не имеет доступа, то SELinux отказывает в доступе. После шага 7 ошибка журналируется в /var/log/messages:
May 6 23:00:54 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr"
to /var/www/html/testfile (samba_share_t). For complete SELinux messages.
run sealert -l c05911d3-e680-4e42-8e36-fe2ab9f8e654
Предыдущие журналы событий могут быть созданы в формате /var/log/messages.YYYYMMDD. Если запущен syslog-ng, предыдущие лог файлы имеют формат /var/log/messages.X. Если процессы setroubleshootd и auditd запущены, ошибки, показанные ниже пишутся в файл /var/log/audit/audit.log:
type=AVC msg=audit(1220706212.937:70): avc:  denied  { getattr } for  pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0  tclass=file

type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
Также ошибки, показанные ниже, пишутся в /var/log/httpd/error_log:
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied


[6] При использовании других политик, таких как MLS, могут использоваться другие роли, например, secadm_r.