Como posso fazer o desligamento não exigir senha de administrador?

49

Se mais de uma pessoa estiver conectada no meu computador, o Ubuntu exigirá autenticação de superusuário ao desligar o computador. Como posso fazê-lo para que qualquer usuário possa desligar o computador sem ser solicitada uma senha?

Isaías
fonte
3
+1 Suspeito que inserir uma senha para desligar irrite muitos usuários em um PC em casa.
Richard Holloway
7
Se você desligar um computador enquanto outros estão conectados, o que acontece com as janelas abertas? Os documentos abertos? Eu acho que qualquer coisa que não seja salva automaticamente é simplesmente perdida. Vale a pena considerar.
Torben Gundtofte-Bruun
"O Ubuntu requer autenticação de superusuário ao desligar o computador", no Ubuntu 11.10 não solicita autorização de superusuário, ao desligar usando o menu, funciona apenas como logout e traz para a página de login, como nesta pergunta: askubuntu.com/ q / 64073/11995 , estou interessado em como configurar o Ubuntu para solicitar uma senha de superusuário?
22611 Mikl
1
Para 14.04 e posterior: consulte askubuntu.com/questions/454039/…
Takkat

Respostas:

27

Você não precisa de uma solução alternativa, basta alterar a política para permitir que você desligue sem se autenticar como administrador para desligar e reiniciar 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 relativa ao desligamento quando outros estiverem conectados a partir 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 relativa à reinicialização quando outras pessoas fizerem login a partir 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ê deseja fazer isso, é uma pergunta diferente.

Richard Holloway
fonte
1
Aqui está um link com mais de policykit: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway
4
Suas alterações não serão apagadas sempre que o polkit for reinstalado ou atualizado?
Ryan Thompson
3
@ Ryan, de acordo com wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04, você pode escrever um arquivo .pkla dentro de / etc / polkit-1 / localauthority, mas não tenho certeza sobre sua sintaxe :) (algumas informações aqui wiki. archlinux.org/index.php/PolicyKit#Authorities )
Joril 10/10
1
Resposta abaixo de Flimm é melhor, não vai ter escrito mais de durante uma actualização askubuntu.com/a/251942/7472
Konstigt
1
Como recarregar regras sem reiniciar?
Suncatcher 7/03
33

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

Veja como você faz isso para esta pergunta:

Crie um arquivo nomeado /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklae edite-o usando o sudoeditseguinte:

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

Em seguida, crie outro .pklaarquivo no mesmo diretório. Use qualquer nome que você queira terminar .pkla, por exemplo allow_all_users_to_restart.pkla, e preencha-o 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:

Flimm
fonte
Isso acabou sendo a solução para um problema muito estranho. No 12.04, após a instalação do PowerBroker (para autenticar no Active Directory), os usuários não podiam reiniciar ou desligar um computador com a GUI (nem o lightdm nem a sessão do indicador funcionavam. Ele retornaria à tela de login.) Depois de adicionar essas permissões ao kit de políticas, tudo funcionou.
precisa saber é o seguinte
Homem pklocalauthority tem a informação em Ubuntu
Konstigt
4
Observe que os nomes mudaram agora! Este é do 14.04: / usr / share / polkit-1 / actions $ grep multiple * org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.power-off-multiple-sessions"> org.freedesktop .login1.policy: <action id = "org.freedesktop.login1.reboot-multiple-sessions"> org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.suspend-multiple-sessions"> org .freedesktop.login1.policy: <action id = "org.freedesktop.login1.hibernate-multiple-sessions">
Konstigt
1
Para o 16.04, além das alterações do @ Konstigt, para mim os arquivos tinham de estar /var/lib/polkit-1/localauthority/50-local.de a linha adicional ResultAny=yesera necessária para os dois arquivos. A única mensagem de aviso que recebo agora é Failed to set wall message, ignoring: Interactive authentication required., mas desligar e reiniciar funciona corretamente agora.
sigalor
O comentário do @ sigalor funcionou para mim, com a adição que sysctl poweroff -irequer org.freedesktop.login1.power-off-multiple-sessions, então eu Action=org.freedesktop.login1.power-off-multiple-sessions
criei
16

Há um caminho melhor. Se você tiver o dbus-send instalado, poderá desligar o dbus sem precisar escalar para obter privilégios de root .

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

Desligar:

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

Reinicialização:

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

Hibernação:

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

Saudações.

ibuclaw
fonte
Uau, isso é ... hacky. Awesome, ainda hacky ...
jathanism
1
Shutdown and Reboot parece não funcionar mais em 11.10
Mikl
@Mikl tentar instalar hal (sudo apt-get install hal)
Epeli
12

Agora, o HAL parece estar depreciado e não instalado nas versões mais recentes do Ubuntu.

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

Desligar:

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

Hibernação:

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 no Precise e Quantal, mas não sei há quanto tempo o foco do Freedesktop parece ter mudado do ConsoleKit para o systemd. Não sei se a Canonical se importa ...

Epeli
fonte
4

Isso funciona em 14.04. Uma variação atualizada da resposta correta anterior de IMO 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 isso 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
Konstigt
fonte
1

Não há como burlar a solicitação de uma senha de superusuário ao reiniciar enquanto outros usuários fazem logon antes de abrir uma janela do terminal e emitir o rebootcomando como root:

sudo reboot

Mesmo assim, se não estiver configurado para ignorar a solicitação de senha para sua conta de usuário, sudotambé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 de administrador salva acidentalmente a mangueira!

jathanism
fonte
Você também pode editar o visudo e fazer com que o usuário não solicite a senha ao digitar sudo.
Da1T
0

Eu acredito que isso é apenas um problema ao fazê-lo através da linha de comando.

Nesse caso, aqui está um link que pode ajudar com seu problema.

myusuf3
fonte
Não, existe uma janela pop-up que solicita a senha de administrador se houver outro usuário conectado quando você a desligar. Usando o gui.
Isaías
-1

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

Você poderia fazer algo semelhante com um script. Não sei ao certo como você é útil com o BASH, mas acredito que se possa escrever um script que seja executado como root e, quando recebe um determinado sinal, executa o comando shutdown.

Lembre-se de que isso pode representar um problema de segurança.

Michael Crenshaw
fonte
Acho que o problema que ele provavelmente encontrará é o prompt que aparece avisando que outras pessoas ainda estão conectadas e exigindo uma senha sudo para ativar o desligamento / reinicialização.
David Thomas