Versão atual
Versões recentes do bash eliminarão privilégios, a menos que tenha sido iniciado com -p
. Da seção de bash (1) descrevendo o modo privilegiado:
If the shell is started with the effective user (group) id not equal to the real user (group) id, and the -p option is not supplied, [...] the effective user id is set to the real user id. If the -p option is supplied at startup, the effective user id is not reset. Turning this option off causes the effective user and group ids to be set to the real user and group ids.
Versões históricas
Você perguntou "De qual versão ...?". A parte de system()
que você cita foi inalterada desde a primeira revisão disponível no repositório git ativo (versão 1.70) . Isso foi verificado em 2004, e os comentários indicam que ele foi modificado pela última vez em 2001.
A versão 3 do Bash foi lançada em 2004 . Isso significa que o bash 2 teria sido a versão atual / mais recente no momento. Então, efetivamente, está dizendo "... bash versão 2 ou superior / mais recente", ou seja. este tem sido o caso desde versão 2.
Para confirmar por si mesmo, você poderia tentar construir algumas versões intermediárias e testá-las, ou consultar o bash repositório git . As linhas responsáveis são:
if (running_setuid && privileged_mode == 0)
disable_priv_mode ();
Eles estão lá desde versão 2.0 . Olhando para trás para versão 1.14.7 , o bash somente descartar privilégios quando o modo privilegiado foi explicitamente desativado com +p
:
case 'p':
if (on_or_off == '+')
{
setuid (current_user.uid);
setgid (current_user.gid);
current_user.euid = current_user.uid;
current_user.egid = current_user.gid;
}