LinuxForum.Fans
Тема

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

Автор: kotaperkot 7 сообщений 4156 просмотров
#371634

Всем привет. Руководство поставило задачу запускать процессы от другого пользователя с разными уровнями секретности. Делать это всё нужно руками, 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 - показывает, что УС изменился, но в итоге потом процесс-команда не запускается.

При смене УС я рассчитываю, что он унаследуется и процессу, замещающему дочерний процесс. Но видимо что-то идет не так =( Кто-нибудь знает как из кода запустить процесс с нужным УС?

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

ничего, что вы сделали велосипед аналогичный su/sudo?

"kotaperkot" написал:
Кто-нибудь знает как из кода запустить процесс с нужным УС?
я думаю вам стоит посмотреть исходные тексты su/sudo(только не основные, а те, что в МСВС), и сделать также как там.
#371669

Я понимаю, что пришлось по сути su сделать частью своего приложения(я просто его переписал на Си++, если уж на чистоту), но "приказы не обсуждаются") К сожалению с МСВС не поставляются исходные коды - она пропиетарная =(

#371677

Сорри, вопрос снимается. Я тестил это всё на kgod2, оказалось что проблема в нем.

#371693

"kotaperkot" написал:
К сожалению с МСВС не поставляются исходные коды - она пропиетарная =(
а там тоже самое что в RedHat. Народ говорил бит-в-бит совпадает. Но я лично не проверял.
#371717

drBatty написал:
[quote="kotaperkot"]К сожалению с МСВС не поставляются исходные коды - она пропиетарная =(
а там тоже самое что в RedHat. Народ говорил бит-в-бит совпадает. Но я лично не проверял.[/quote]
Может быть, но, например, kgod2 2.0 отличается от firefox 2.0 все-таки чем-то. На FF 2.0 у меня расширение работает, а на kgod2 2.0 - нет. Как я только не пытался) Можно возразить, что браузер - не часть ОС, и это будет правдой. Я к тому, что различия могут быть в самых неожиданных местах. Но за наводку спасибо =)
#371746

kotaperkot, погуглите. Я видел ftp где-то в redhat'е, с исходниками. Его особо не рекламируют, но он есть(был во всяком случае). Естественно там всё совсем не так, как в upstream'e. Возьмите оттуда su, все так делают. Ну не кричите особо. :-X

Войдите или зарегистрируйтесь, чтобы ответить.