Como posso fazer com que o desligamento não exija senha de administrador?

46

Se mais de uma pessoa estiver conectada no meu computador, o Ubuntu exige autenticação de superusuário ao desligar o computador. Como posso fazer com que qualquer usuário possa desligar o computador sem precisar de uma senha?

    
por Isaiah 05.08.2010 / 18:11

9 respostas

27

Você não precisa de uma solução alternativa, basta alterar a política para permitir que você desligue sem autenticar como administrador para o desligamento e reinicialize quando vários usuários estiverem conectados.

Edite o arquivo /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy usando seu editor de texto favorito. Você precisará de permissões de root.

Altere a seção relacionada ao desligamento quando outras pessoas estiverem conectadas de

  <action id="org.freedesktop.consolekit.system.stop-multiple-users">
    <description>Stop the system when multiple users are logged in</description>
    <message>System policy prevents stopping the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
  </action>

para

  <action id="org.freedesktop.consolekit.system.stop-multiple-users">
    <description>Stop the system when multiple users are logged in</description>
    <message>System policy prevents stopping the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

e a seção relacionada à reinicialização quando outras pessoas estão conectadas de

  <action id="org.freedesktop.consolekit.system.restart-multiple-users">
    <description>Restart the system when multiple users are logged in</description>
    <message>System policy prevents restarting the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
  </action>

para

  <action id="org.freedesktop.consolekit.system.restart-multiple-users">
    <description>Restart the system when multiple users are logged in</description>
    <message>System policy prevents restarting the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

E isso permitirá que você desligue e reinicie o PC quando vários usuários estiverem conectados. Se você quer fazer isso, é uma questão diferente.

    
por Richard Holloway 06.08.2010 / 16:00
31

A resposta de Richard Holloway não é, na verdade, a maneira como as autorizações PolickKit devem ser concedidas. Os arquivos instalados em /usr/share/polkit-1/actions não devem ser modificados. Em vez disso, você deve modificar as autoridades em /etc/polkit-1/localauthority/50-local.d/ .

Veja como você faz isso para essa pergunta:

Crie um arquivo chamado /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pkla e edite-o usando sudoedit para ficar assim:

[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop-multiple-users
ResultInactive=no
ResultActive=yes

Em seguida, crie outro arquivo .pkla no mesmo diretório. Use qualquer nome que você queira terminar com .pkla , por exemplo, allow_all_users_to_restart.pkla e preencha com este conteúdo:

[Allow all users to restart]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.restart-multiple-users
ResultInactive=no
ResultActive=yes

Referências:

por Flimm 06.02.2013 / 12:51
16

Existe uma maneira melhor. Se você tem dbus-send instalado, você pode desligar através do dbus sem a necessidade de escalar para privilégios de root .

Não me lembro da página em que a documentação está, mas um usuário do Archlinux descobriu isso.

Encerramento:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Reiniciar:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Reboot

Suspender:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:1

Hibernar:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate

Atenciosamente.

    
por ibuclaw 06.08.2010 / 09:31
12

O HAL parece estar agora depurado e não instalado nos últimos lançamentos do Ubuntu.

Você deve usar ConsoleKit e UPower serviços dbus para gerenciar o estado de energia

Encerramento:

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

Reiniciar:

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

Suspender:

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

Hibernar:

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate

Obrigado aos fóruns do Arch Linux .

Isso funciona por enquanto em Precise e Quantal, mas não sabemos por quanto tempo desde que o foco do Freedesktop parece ser deslocado do ConsoleKit para o systemd. Não sei se a Canonical se importa ...

    
por Epeli 15.10.2012 / 14:23
4

Isso funciona em 14.04. Uma variação atualizada da resposta anterior, IMO, correta por Flimm .

sudo mkdir -p /etc/polkit-1/localauthority/50-local.d
sudoedit /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown_reboot_suspend.pkla 

Cole isto dentro:

[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-multiple-sessions
ResultActive=yes

[Allow all users to reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-multiple-sessions
ResultActive=yes

[Allow all users to suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=yes

[Allow all users to ignore inhibit of shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-ignore-inhibit
ResultActive=yes

[Allow all users to ignore inhibit of reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-ignore-inhibit
ResultActive=yes

[Allow all users to ignore inhibit of suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-ignore-inhibit
ResultActive=yes
    
por Konstigt 21.06.2014 / 19:01
1

Não há como contornar o prompt para uma senha de superusuário ao reinicializar enquanto outros usuários estão logados abrindo uma janela de terminal e emitindo o comando reboot como root:

sudo reboot

Mesmo assim, se não for configurado para ignorar a senha que solicita sua conta de usuário, sudo também solicitará sua senha.

Não se preocupe, estas são boas coisas. A reinicialização deve ser rara e um simples prompt de senha do administrador salva a limpeza acidental de si mesmo!

    
por jathanism 05.08.2010 / 19:06
0

Acredito que isso seja apenas um problema ao fazer isso por meio da linha de comando.

Se sim, aqui está um link que pode ajudar com o seu problema.

    
por myusuf3 05.08.2010 / 18:16
0

Adicione parada e / ou reinicialize no arquivo sudoers atribuído ao grupo / usuário que você deseja permitir executar esta tarefa. Dessa forma, você ainda pode controlar quem pode desligar, mas sem fornecer acesso root completo à máquina.

link

    
por tommed 06.12.2010 / 16:19
-1

Aparentemente, você pode desligar sem raiz da GUI, porque o gdm é executado como root. O Gnome diz ao gdm para desligar, e o gdm faz isso.

Você pode fazer algo semelhante com um script. Não tenho certeza de como você é útil com o BASH, mas acredito que alguém poderia escrever um script que seja executado como root e, quando receber um certo sinal, execute o comando shutdown.

Tenha em mente que isso pode representar um problema de segurança.

    
por mac9416 05.08.2010 / 18:58