Como o botão liga / desliga desliga o computador sem permissão de root?

36

Quando tento desligar o computador a partir de uma linha de comando ou terminal, devo ter privilégios de root:

amy@amy:~$ shutdown now
shutdown: Need to be root

e

amy@amy:~$ halt
halt: Need to be root

mas ao desligar usando a interface gráfica do usuário, ou seja, o botão de desligamento ou o botão de desligamento de hardware, não é solicitada a senha para isso. O que é esse desligamento para a interface gráfica e por que não precisa dos privilégios de senha ou root?

Estou usando o Ubuntu 11.04 Natty.

amyassin
fonte
1
porque se um invasor tiver acesso físico ao seu computador, você já terá perdido. Tentar impedir que alguém que esteja ao alcance da caixa de armas faça quase tudo é, na melhor das hipóteses, uma tática de atraso e, na maioria das vezes, causa mais inconviniência para os usuários do dia-a-dia do que para um invasor. A maioria das distros do Linux fornecerá um prompt de raiz, se falado com firmeza durante a inicialização, exatamente por esse motivo.
Joseph Rogers

Respostas:

33

O botão liga / desliga do hardware aciona um evento ACPI ao qual acpid(o daemon ACPI) percebe e reage; nesse caso, desligando o sistema, embora você possa fazer o que quiser. O daemon ACPI é executado como root, portanto, ele tem permissão para desligar o sistema. Os ambientes de área de trabalho (por exemplo, gdmpara o Gnome) geralmente também são executados como root, então eu suspeito que eles funcionem da mesma maneira - você não tem permissão para desligar o sistema, mas pode dizer gdmque deseja desligar e pode fazê-lo seu nome

Michael Mrozek
fonte
é seguro ?? "você pode fazer o que quiser."
Amyassin
7
Para acpidfazer algo diferente do que já faz, você teria que ser root, para ter permissão para fazer coisas inseguras. Também é possível usar sistemas MAC como o SELinux para proteger acpid, restringindo as coisas que eles podem fazer, mesmo enquanto executam como root.
Warren Young
5
@amyassin Bem, para mudar o que faz, você precisa de privilégios de root; um usuário normal não pode dizer o que fazer. Mas acpidé configurável, ele pode executar scripts diferentes, dependendo dos eventos de hardware que vê (por exemplo, eu tenho acpidbloquear meu computador quando eu bati o botão de energia)
Michael Mrozek
7
@amyassen Se alguém tiver acesso físico à sua máquina, será tarde demais para se preocupar com a segurança - se o botão liga / desliga não acionar um desligamento normal, basta puxar o cabo de alimentação e causar um desligamento desagradável .
Shadur
3
O referido 'software malicioso' teria que obter propriedade de root e permissões SUID para instruir o init a fazer com o desligamento - e novamente, quando chegar a esse ponto, você terá problemas maiores com que se preocupar do que um possível desligamento.
Shadur
11

A resposta de Michael discute corretamente a função do sistema ao usar o botão liga / desliga do hardware, mas a maioria dos ambientes de área de trabalho realmente usa dbusesse objetivo, em vez de fazê-lo. Por exemplo, o GNOME usa dbus's org.freedesktop.Hal.Device.SystemPowerManagement.Shutdownquando o botão de desligamento é clicado. Quando isso é enviado, dbusfaz algumas verificações para determinar se o usuário que está enviando a mensagem está autorizado a executar um desligamento e, se houver, encerra o sistema.

Você pode emular isso usando dbus-send. Por exemplo, para desligar o sistema usando dbus, use algo como isto:

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Chris Down
fonte