Можно ли очистить issetuid () для дочернего процесса? [закрыто]

У меня есть сценарий оболочки A , который вызывает программу B . должен быть вызван как root, чтобы могла произойти некоторая начальная настройка. После этого A вызывает setuid () и setgid (), чтобы уменьшить свои собственные привилегии в целях безопасности. Затем A вызывает B .

Проблема в том, что B демонстрирует нежелательное поведение тогда и только тогда, когда A вызывал setuid () / setgid () перед вызовом B .Этого не происходит, когда я вызываю B напрямую от имени разных пользователей через sudo -u xxx -g xxx . Насколько я могу судить (поправьте меня, если я ошибаюсь), единственный способ B узнать, что A сменил пользователя, - это через issetuid () syscall (я проверил переменные среды, они совпадают).

Как я могу очистить этот бит, чтобы B вел себя нормально? Похоже, что использование issetuid () как-то связано с отслеживанием того, является ли процесс "испорченным", т.е. артефакты из менее привилегированной среды (?). Но я уменьшил свои привилегии, а не повысил их! И вдобавок ко всему, я все равно вычистил свои env vars!

Кроме очень краткой справочной страницы по issetuid (), я почти ничего не могу найти об этом состоянии системного вызова / магической программы. Может ли кто-нибудь помочь лучше понять?

3
задан 19 January 2012 в 11:06

1 ответ

Без дополнительной информации (такой как название программного обеспечения A и B) это трудно диагностировать.

Однако, я бы посмотрел на переменную окружения, наверняка есть такая, которая не была очищена A и очищена sudo.

0
ответ дан 19 January 2012 в 11:06

Другие вопросы по тегам:

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