permissão de encerramento do Linux

8

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

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

shutdown -h now

Eu seria solicitado por

shutdown: need to be root

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

Alguém pode explicar por que isso acontece?

Obrigado KC

    
por K.Chen 29.10.2013 / 05:21

3 respostas

8

A pergunta feita por K.Chen é: por que eu preciso de privilégios sudo quando faço isso do CLI, e não preciso desses privilégios quando faço isso da 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 a necessidade de sudo credenciais. Isto, aliás, implica que deve haver uma seqüência de desligamento que não envolva o desligamento do programa, o que requer privilégios de sudo (nada disso).

Eu não sei em detalhes como cada DE faz isso, mas eu sei que existe uma maneira gentil de derrubar, ou reiniciar / shutdown / hibernar seu sistema, que não requer privilégios de root. Você pode encontrar a postagem original em uma postagem no Arch Linux Forum . Em essência, isso equivale a emitir esses 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 olhar o código, mas acredito que esta seja uma aposta segura.

    
por 29.10.2013 / 07:01
5

O motivo por trás dessa decisão de design não é técnico (você pode ter um comando shutdown não privilegiado ou uma senha na GUI).

  • Ao usar um ambiente de área de trabalho, o usuário é supostamente para ter acesso físico à máquina. Então é melhor permitir um desligamento limpo do que permitir que o usuário aperte 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, mais privilégios são solicitados.

Estas não são regras mas apenas padrões baseadas 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, pode configurar seu sistema de acordo.

    
por 29.10.2013 / 07:30
1

Sudo (superusuário do) permite que um administrador do sistema dê 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. shutdown -h comando ou init 0 comando pode ser usado para desligar a máquina. Mas ambos os comandos exigiam privilégios de root para serem executados.

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

digite que encerra no terminal.

Espero que agora a sua dúvida esteja clara:)

    
por 29.10.2013 / 06:27