
Я пишу код, который поддерживает SELinux. Я новичок в этом модуле безопасности и у меня крутая кривая обучения.
Чтобы мой код работал в среде SELinux, мне нужно иметь возможность перемаркировать файлы. Например, я монтирую временные файловые системы и хочу восстановить исходную метку после монтирования.
Очевидно, что для монтирования мне нужны права root (иметь полномочия CAP_SYS_ADMIN), но нужно ли мне быть пользователем root для перемаркировки?
В Fedora мне разрешено переименовывать файлы, владельцем которых я являюсь, например, как непривилегированный пользователь я могу сделать следующее:
$ touch /tmp/test
$ ls -Z /tmp/test
unconfined_u:object_r:user_tmp_t:s0 /tmp/test
$ chcon system_u:object_r:etc_t:s0 /tmp/test
$ ls -Z /tmp/test
system_u:object_r:etc_t:s0 /tmp/test
Похоже, что нет разрешения на переименование файлов, принадлежащих другому пользователю.
Но сейчас я нашел следующее в RedHatруководство:
Политика SELinux определяет, могут ли пользователи изменять контекст SELinux для любого файла.
что, по-видимому, указывает на то, что такое поведение действительно можно настроить, и что я не могу полагаться на возможность переименовывать файлы, принадлежащие мне.
РЕДАКТИРОВАТЬ:
Похоже, Fedora реализует это с помощью constraints
.
# dnf install setools-console
# seinfo --constrain
...
constrain file {relabelto create relabelfrom } (u1 == u2 or ( t1 == can_change_object_identity ));
...