@k0taperkot

[МСВС] Как изменить уровень секретности процесса?

Всем привет. Руководство поставило задачу запускать процессы от другого пользователя с разными уровнями секретности. Делать это всё нужно руками, su/sudo использовать нельзя. Почему, не объяснили - военные не любят вопросы.

Алгоритм работы:
1. Я запускаю программу под рутом, он форкает свой процесс
2. Дочерний процесс проверяет указанного пользователя на существование, запрашивает информацию о нем, меняет UID, GID и переменные окружения,
3. Дочерний процесс заменяет себя другим процессом-командой(execvp).

Если выполнять [запуск процесса под другим пользователем] и [смену уровня секретности процесса] по отдельности - все ок. А если вместе - дочерний процесс не заменяется процессом-командой. Если использовать system(да, она не заменяет процесс), то errno = 38 (Функция не реализована), а execvp не возвращает вообще ошибок - просто не выполняет команду.

Пользователя меняю так же, как и в su, кроме проверки пароля(у меня через PAM). Но во-первых если запускать приложение из-под рута, то su тоже игнорирует аутентификацию, во-вторых без смены уровня секретности всё отлично работает.
Уровень секретности(УС), если верить руководству программиста(книга 14), меняют 2 функции - setmac и psetmac. Уровень секретности может менять либо root, либо пользователь с атрибутом MCBC_CAP_SETMAC. Собственно обе эти функции и пытаюсь использовать(не одновременно, конечно). УС меняю из дочернего процесса, после запроса инфы о пользователе, но до смены UID и GID. Проверяю смену УС функциями pgetmac, getmac - показывает, что УС изменился, но в итоге потом процесс-команда не запускается.

При смене УС я рассчитываю, что он унаследуется и процессу, замещающему дочерний процесс. Но видимо что-то идет не так =( Кто-нибудь знает как из кода запустить процесс с нужным УС?
  • Вопрос задан
  • 3078 просмотров
Решения вопроса 1
@k0taperkot Автор вопроса
Сорри, вопрос снимается. Я тестил это всё на kgod2, оказалось что проблема в нем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы