O issetuid () pode ser limpo para um processo filho? [fechadas]

3

Eu tenho um script de wrapper A que está chamando o programa B . A deve ser chamado como root, portanto, alguma configuração inicial pode acontecer. Depois disso, A chama setuid () e setgid () para reduzir seus próprios privilégios, para segurança e proteção. Então, A invoca B .

O problema é que B exibe um comportamento indesejável se e somente se A chamou setuid () / setgid () antes de invocar B . Isso não acontece quando eu invoco B diretamente como usuários diferentes via sudo -u xxx -g xxx . Tanto quanto eu posso dizer (me corrija se eu estiver errado), a única maneira B poderia saber que A mudou o usuário é através do issetuid() syscall (eu verifiquei as variáveis de ambiente; eles correspondem) .

Como posso limpar esse bit, de modo que B se comporta normalmente? Parece que o uso de issetuid () é algo que monitora se o processo está "corrompido", isto é, carrega artefatos de um ambiente menos privilegiado (?). Mas eu reduzi meus privilégios, não os elevei! E além disso, eu esfreguei meu env vars de qualquer maneira!

Além da página man muito concisa no issetuid (), não consigo encontrar quase nada sobre esse estado do programa syscall / magical. Alguém pode dar uma melhor compreensão?

    
por trbabb 19.01.2012 / 07:59

1 resposta

0

Sem mais informações (como o nome do software A e B), isso é difícil de diagnosticar.

No entanto, eu olharia para a variável de ambiente, há certamente uma que não foi limpa por A e que é limpa pelo sudo.

    
por Misc 21.07.2012 / 10:55