Estou dentro /sbine vejo que shutdowntem permissões rwxr-xr-x. Isso não significa que alguém possa executá-lo?
shutdowncomando.
shutdown.
Estou dentro /sbine vejo que shutdowntem permissões rwxr-xr-x. Isso não significa que alguém possa executá-lo?
shutdowncomando.
shutdown.
Respostas:
Qualquer pessoa pode executar shutdown, mas acionar um desligamento do sistema requer privilégios de root. Mas shutdownnão é setuid e , portanto, somente o root pode executá-lo com êxito . O shutdownprograma é 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)
shutdownnão é diferente de /bin/rm. Todos podem executá-lo, mas um usuário comum não pode remover /etcou 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 shutdownfoi configurado, ele seria executado como root, não importa quem o invoque; mas não é.)
Que tal chamar shutdownde uma GUI, por exemplo, com control-alt-del? É importante perceber que, nesse caso, shutdowné iniciado diretamente inite 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 shutdownpara verificar se o usuário conectado no momento está autorizado a executá-lo. Mas isso é relevante apenas porque shutdownestá 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/passwdexecutado com permissões de root"! /etc/passwdnão é executável (é o "arquivo de senhas" que está sendo modificado).
O shutdownpró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) = ?
shutdownverifica 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.
-apartir da linha de comando não fará diferença: shutdown -aainda deve ser executado com permissões de root (que initfornece control-alt-del).