Estou dentro /sbin
e vejo que shutdown
tem permissões rwxr-xr-x
. Isso não significa que alguém possa executá-lo?
shutdown
comando.
shutdown
.
Estou dentro /sbin
e vejo que shutdown
tem permissões rwxr-xr-x
. Isso não significa que alguém possa executá-lo?
shutdown
comando.
shutdown
.
Respostas:
Qualquer pessoa pode executar shutdown
, mas acionar um desligamento do sistema requer privilégios de root. Mas shutdown
não é setuid e , portanto, somente o root pode executá-lo com êxito . O shutdown
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.
GLENDOWER: Eu posso chamar espíritos das profundezas dos vasos.
HOTSPUR: Por que eu também posso, ou qualquer homem; Mas eles virão quando você os chamar?
(de Henrique 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 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 diretamente init
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á executado shutdown -a
. (Veja a documentação que @ some1 citou em sua resposta). Isso indica shutdown
para verificar se o usuário conectado no momento está autorizado a executá-lo. Mas isso é relevante apenas porque shutdown
está sendo executado como raiz nesse cenário.
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 para chmod
.
/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:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
verifica se o seu UID é 0. #
if(getuid() != 0) printf("Need to be root");
. Qual, de fato, o código fonte mostra que é.
Parece que o desligamento verificará uma lista de acesso se você a sinalizar com -a:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
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
Why can't I execute shutdown when the permission is rwxr-xr-x?
Os bits de permissão não excluem necessariamente o controle de acesso com base em um usuário ou grupo.
-a
partir da linha de comando não fará diferença: shutdown -a
ainda deve ser executado com permissões de root (que init
fornece control-alt-del).