Permissão de desligamento do Linux


8

Suponha que você instale um ambiente de área de trabalho, como ubuntu ou debian. Você pode desligar o sistema clicando em um botão em algum lugar do menu do sistema como um usuário normal. Você não precisa mudar para superusuário para fazer isso.

No entanto, no mesmo ambiente de área de trabalho, se eu abrir um terminal (por exemplo, gnome-terminal) como um usuário normal e digite

shutdown -h now

Eu seria solicitado por

shutdown: need to be root

A única maneira de desligar é preceder o comando com um sudo.

Alguém pode explicar por que isso é assim?

Thanks KC


Respostas:


8

A pergunta feita pelo K.Chen é: por que eu preciso de privilégios sudo quando faço isso na CLI, mas não preciso de tais privilégios quando faço isso na GUI.

A primeira parte da resposta é que as pessoas que projetam ambientes de desktop, como Gnome, KDE, Xfce, Mate, Cinnamon, ... tentam simplificar o trabalho de seus usuários, e configuram o desligamento e a reinicialização sem exigir credenciais do sudo. Isso, aliás, implica que deve haver uma sequência de desligamento que não envolva o desligamento do programa, o que exige privilégios de sudo (não há maneira de contornar isso).

Não sei em detalhes como cada DE faz isso, mas sei que há uma maneira suave de desativar, ou reiniciar / desligar / hibernar o sistema, o que não requer privilégios de root. Você pode encontrar a postagem original em uma postagem do Arch Linux Forum . Em essência, isso equivale a emitir estes comandos:

parar

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

reiniciar

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

hibernar

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Meu palpite é que os botões da GUI usam aproximadamente esses comandos. Para ter certeza, é preciso analisar o código, mas acredito que essa é uma aposta segura.


11
Se alguém fizer login remoto em uma máquina que também tenha um ambiente de área de trabalho em execução, ele poderá emitir esses comandos e desligar / reiniciar / suspender / hibernar com êxito?
Gerrit 29/10

Há um lado malicioso nessa questão, acredito que deve ser exercida alguma discrição.
MariusMatutiae

11
Por que malicioso? Se puder ser abusado, os sysops devem saber e, em seguida, saber como se proteger.
Gerrit 29/10

Não estou dizendo que você está sendo malicioso, mas que um uso malicioso pode ser feito com essas informações. Já estou arrependido de tê-lo compartilhado ... Talvez eu devesse ter feito como @Matteo
MariusMatutiae

5

O motivo desta decisão de design não é técnico (você pode ter um shutdowncomando não privilegiado ou exigir uma senha na GUI).

  • Ao usar um ambiente de área de trabalho, o usuário deve ter acesso físico à máquina. Então é melhor permitir um desligamento limpo do que permitir que o usuário pressione o botão liga / desliga ou desconecte o cabo de alimentação.

  • Ao usar um shell, o usuário pode ser um usuário remoto e, para evitar um desligamento remoto, são solicitados mais privilégios.

Essas não são regras, mas apenas padrões com base em suposições: você pode ter um usuário local em um shell e um usuário remoto com um ambiente de desktop. Se você quiser escolher o comportamento padrão, poderá configurar seu sistema adequadamente.


Entendo o seu ponto, @ Matteo. Mas, como MariusMatutiae disse, o DE deve ter chamado outro programa que não seja "shutdown" para desligar sem privilégios de superusuário. Você tem alguma idéia do que é isso?
K.Chen

1

Sudo (superusuário do) permite que um administrador de sistema conceda a certos usuários (ou grupos de usuários) a capacidade de executar alguns (ou todos) comandos como root enquanto registra todos os comandos e argumentos. O comando shutdown -h ou init 0 pode ser usado para desligar a máquina. Mas ambos os comandos exigiram privilégios de root para serem executados.

O comando localizado em / sbin deve ter privilégio de root para executá-lo. Para encontrar a localização do comando shutdown,

digite qual desligamento no terminal.

Espero que agora sua dúvida esteja clara :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.