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.
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?
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.