
elgio
(usa OpenSuSE)
Enviado em 14/06/2009 - 21:13h
A questão é o bit de permissão suid!
Quando este bit está setado, permite executar o comando como se fosse ele. Vamos a um exemplo, citado por você mesmo:
(e você pode reproduzir ai no seu Linux)
ls -la /etc/shadow
-rw-r----- 1 root shadow 1140 2009-05-11 20:45 /etc/shadow
Veja que APENAS O ROOT tem permissão de escrever no arquivo. Isto é ótimo, imagina se todos pudessem escrever! Todos poderiam criar senhas de usuários! INADMISSÍVEL.
Mas como o João consegue trocar a sua senha então?
Para trocar ele usa o programa passwd. Vamos ver como está as permissões deste binário:
ls -la `which passwd `
-rwsr-xr-x 1 root shadow 79208 2008-06-06 21:41 /usr/bin/passwd
O arquivo nos diz que pertence ao usuário root. Todos podem ler e executar. Mas veja o valor 's' no campo de execução do usuário. Este é o SUID. Diz que aqueles que puderem executar o comando (e todos podem) o farão como se fossem o root. Logo, quando o João executa passwd ele é ROOT para este comando.
Claro que o binário passwd foi cuidadosamente escrito para que João não pudesse fazer nada mais do que apenas trocar a sua senha. Bugs históricos em binários SUID permitiam invasões e ter cuidado nisto é sempre imprescindível.