Qualquer pessoa pode executar shutdown
, mas o acionamento de um sistema requer privilégios de root. Mas shutdown
não é setuid, e, portanto, somente o root pode com êxito executá-lo. O programa shutdown
é bom o suficiente para verificar seus privilégios e avisar se houver algum problema, mas mesmo que ele tenha tentado ingenuamente um desligamento do sistema, nada acontecerá.
GLENDOWER: I can call spirits from the vasty deep.
HOTSPUR: Why, so can I, or so can any man; But will they come when you do call for them?
(from Henry IV)
shutdown
não é diferente de /bin/rm
. Todos podem executá-lo, mas um usuário comum não pode remover /etc
ou o diretório pessoal de outro usuário.
Especificamente: Apenas um processo executado com privilégios de root (UID efetivo 0) pode direcionar o sistema init para interromper os serviços do sistema , encerrar todos os processos do usuário e emitir a chamada de sistema que realmente interrompe a máquina. (Se shutdown
fosse setuid, ele seria executado como root, não importando quem invocasse; mas não é.)
Que tal chamar shutdown
de uma GUI, por ex. com controle-alt-del? É importante perceber que, nesse caso, shutdown
é iniciado diretamente por init
e ele é executado com privilégios de root. Portanto, todos os usuários que chegam ao console podem desativá-lo. Se isso não for desejável, control-alt-delete executará shutdown -a
. (Veja a documentação que @ some1 citou em sua resposta). Isso diz ao shutdown
para verificar se o usuário atualmente logado está autorizado a executá-lo. Mas isso é relevante apenas porque shutdown
está sendo executado como root neste cenário.