Estou dentro /sbin
e vejo que shutdown
tem permissões rwxr-xr-x
. Isso não significa que alguém possa executá-lo?
permissions
security
shutdown
Korgan Rivera
fonte
fonte
shutdown
comando.shutdown
.Respostas:
Qualquer pessoa pode executar
shutdown
, mas acionar um desligamento do sistema requer privilégios de root. Masshutdown
não é setuid e , portanto, somente o root pode executá-lo com êxito . Oshutdown
programa é bom o suficiente para verificar seus privilégios e informá-lo se houver algum problema, mas mesmo que tentasse ingenuamente um desligamento do sistema, nada aconteceria.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 inicial de outro usuário.Especificamente: Apenas um processo em execução com privilégios de root (UID 0 efetivo) pode direcionar o sistema init para interromper os serviços do sistema, finalizar todos os processos do usuário e emitir a chamada do sistema que realmente interrompe a máquina. (Se
shutdown
foi configurado, ele seria executado como root, não importa quem o invoque; mas não é.)Que tal chamar
shutdown
de uma GUI, por exemplo, com control-alt-del? É importante perceber que, nesse caso,shutdown
é iniciado diretamenteinit
e executado com privilégios de root. Portanto, todo mundo que caminha até o console pode desligá-lo. Se isso não for desejável, control-alt-delete será executadoshutdown -a
. (Veja a documentação que @ some1 citou em sua resposta). Isso indicashutdown
para verificar se o usuário conectado no momento está autorizado a executá-lo. Mas isso é relevante apenas porqueshutdown
está sendo executado como raiz nesse cenário.fonte
shutdown
, mas esse programa não pode realmente acionar o desligamento do sistema, a menos que o usuário atual tenha privilégios de root. Direita?shutdown
. Um programa setuid é executado com as permissões do usuário que possui o executável. Por exemplo,/etc/passwd
é executado com permissões de root para permitir que você modifique o arquivo de senha. Veja a página de manual parachmod
./usr/bin/passwd
executado com permissões de root"!/etc/passwd
não é executável (é o "arquivo de senhas" que está sendo modificado).O
shutdown
próprio binário verifica se o seu UID é 0.Veja a saída strace de:
fonte
shutdown
verifica se o seu UID é 0. #if(getuid() != 0) printf("Need to be root");
. Qual, de fato, o código fonte mostra que é.Sim ! Todo mundo pode executar esse comando. Como você disse, você pode executá-lo, mas se depara com uma mensagem "Precisa ser root", e não com um
permission denied
. Oshutdown
comando verificaUID
se você é root ou não.fonte
Parece que o desligamento verificará uma lista de acesso se você a sinalizar com -a:
Como você está atualmente chamando sem o sinalizador -a, o padrão é permitir apenas o desligamento da raiz.
Se você deseja que outros usuários possam executar o comando, configure esse arquivo e use o sinalizador
Os bits de permissão não excluem necessariamente o controle de acesso com base em um usuário ou grupo.
fonte
-a
partir da linha de comando não fará diferença:shutdown -a
ainda deve ser executado com permissões de root (queinit
fornece control-alt-del).