Я изучаю SELinux.
С помощью SELinux можно ли разрешить двоичному файлу доступ к файлам, открытым его родительским процессом, и никаких других файлов?
Если это невозможно, тогда мы должны усилить это.
Да, это можно сделать.
SELinux - это система маркировки, и доступ для выполнения различных операций над файлами (но также и над пользователями, процессами, ...) предоставляется на основе контекста безопасности инициирующего процесса.
Опорная политика определяет контекст безопасности процесса:
# ps -defZ | grep httpd
system_u:system_r:httpd_t:s0 root 1085 1 0 21:22 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
В этом примере контекст безопасности имеет следующие элементы:
system_u
: пользователь SELinuxsystem_r
: роль SELinuxhttpd_t
: атрибут применения типа SELinux.s0
: диапазон MLS/MCS, соответствующий другим политикам, отличным от целевого.А также определяет, к каким контекстам безопасности процесс может иметь доступ:
# ll -dZ /srv/www/html/
drwxr-s---. root apache system_u:object_r:httpd_sys_content_t:s0 /srv/www/html/
# sesearch -s httpd_t -t httpd_sys_content_t -c file -p read -Ad
Found 1 semantic av rules:
allow httpd_t httpd_sys_content_t : file { ioctl read getattr lock open } ;
В приведенном выше примере, учитывая контекст безопасности каталога /srv/www/html
, вы можете найти с помощью sesearch(1)
если это определено в политике, что процесс с меткой httpd_t
может иметь доступ на чтение к директории с меткой httpd_sys_content_t
.
Проверьте man- sesearch
для большего количества вариантов.
Таким образом, чтобы разветвленный процесс был ограничен доступом к файлам, открытым его родителем, вы должны убедиться, что существует политика, разрешающая эту операцию.