У меня есть сценарий оболочки 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 (), я почти ничего не могу найти об этом состоянии системного вызова / магической программы. Может ли кто-нибудь помочь лучше понять?
Без дополнительной информации (такой как название программного обеспечения A и B) это трудно диагностировать.
Однако, я бы посмотрел на переменную окружения, наверняка есть такая, которая не была очищена A и очищена sudo.