¿Cómo puedo hacer que el apagado no requiera contraseña de administrador?

49

Si más de una persona ha iniciado sesión en mi computadora, Ubuntu requiere autenticación de superusuario cuando apaga la computadora. ¿Cómo puedo lograr que cualquier usuario pueda apagar la computadora sin que se le solicite una contraseña?

Isaias
fuente
3
+1 Sospecho que ingresar una contraseña para apagar molesta a muchos usuarios en una PC en casa.
Richard Holloway
77
Si apaga una computadora mientras otros están conectados, ¿qué pasa con sus ventanas abiertas? ¿Sus documentos abiertos? Creo que todo lo que no se guarda automáticamente simplemente se pierde. Vale la pena considerar esto.
Torben Gundtofte-Bruun
"Ubuntu requiere autenticación de superusuario al apagar la computadora", en Ubuntu 11.10 no solicita autorización de superusuario, cuando se apaga usando el menú, solo funciona como cierre de sesión y trae a la página de inicio de sesión, como en esta pregunta: askubuntu.com/ q / 64073/11995 , ¿estoy interesado en cómo configurar Ubuntu para pedirme una contraseña de superusuario?
Mikl
1
Para 14.04 y posterior: consulte askubuntu.com/questions/454039/…
Takkat

Respuestas:

27

No necesita una solución alternativa, solo cambie la política para permitirle cerrar sin autenticarse como administrador para el apagado y reiniciar cuando varios usuarios inicien sesión.

Edite el archivo /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy con su editor de texto favorito. Necesitarás permisos de root.

Cambie la sección relacionada con el apagado cuando otros inicien sesión desde

  <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>

a

  <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>

y la sección relacionada con el reinicio cuando otros inician sesión desde

  <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>

a

  <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>

Y eso le permitirá apagar y reiniciar la PC cuando varios usuarios inicien sesión. Si desea hacerlo, esa es una pregunta diferente.

Richard Holloway
fuente
1
Aquí hay un enlace con más información sobre el juego de políticas: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway
44
¿No se borrarán sus cambios cada vez que se vuelva a instalar o actualice Polkit?
Ryan Thompson el
3
@Ryan, de acuerdo con wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04 , podría escribir un archivo .pkla dentro de / etc / polkit-1 / localauthority, pero no estoy seguro de su sintaxis :) (alguna información aquí wiki. archlinux.org/index.php/PolicyKit#Authorities )
Joril
1
La respuesta a continuación de Flimm es mejor, no se sobrescribirá
Konstigt
1
¿Cómo recargar las reglas sin reiniciar?
Suncatcher
33

La respuesta de Richard Holloway no es en realidad la forma en que se deben otorgar las autorizaciones de PolickKit. Los archivos instalados bajo /usr/share/polkit-1/actionsno están destinados a ser modificados. En cambio, debe modificar las autoridades bajo /etc/polkit-1/localauthority/50-local.d/.

Así es como lo haces para esta pregunta:

Cree un archivo con el nombre /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklay edítelo sudoeditpara que se vea así:

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

Luego cree otro .pklaarchivo en el mismo directorio. Use cualquier nombre con el que desee terminar .pkla, por ejemplo allow_all_users_to_restart.pkla, y complételo con estos contenidos:

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

Referencias

Flimm
fuente
Esto resultó ser la solución para un problema muy extraño. El 12.04 después de instalar PowerBroker (para autenticarse en Active Directory), los usuarios no podían reiniciar o apagar una computadora con la GUI (ni lightdm ni la sesión de indicador funcionaron. Simplemente regresaría a la pantalla de inicio de sesión). Después de agregar estos permisos a juego de políticas, todo funcionó.
korylprince
man pklocalauthority tiene la información en Ubuntu
Konstigt
44
Tenga en cuenta que los nombres han cambiado ahora! Esto es de 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 16.04, además de los cambios de @ Konstigt, para mí los archivos tenían que estar /var/lib/polkit-1/localauthority/50-local.dy la línea adicional ResultAny=yesera necesaria para ambos archivos. El único mensaje de advertencia que recibo ahora es Failed to set wall message, ignoring: Interactive authentication required., pero cerrar y reiniciar funciona correctamente ahora.
sigalor
El comentario de @ sigalor funcionó para mí, con la adición que sysctl poweroff -irequiere org.freedesktop.login1.power-off-multiple-sessions, así que hice un archivo separado con las mismas líneas excepto conAction=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken
16

Hay una mejor manera. Si tiene instalado dbus-send, puede cerrar a través de dbus sin la necesidad de escalar a privilegios de root .

No recuerdo la página donde está la documentación, pero un usuario de Archlinux descubrió esto.

Apagar:

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

Saludos.

ibuclaw
fuente
Wow eso es ... hacky. Impresionante, pero hacky ...
jathanism
1
Apagar y reiniciar parece que ya no funciona en 11.10
Mikl
@Mikl intenta instalar hal (sudo apt-get install hal)
Epeli
12

HAL parece estar ahora descremado y no instalado en las últimas versiones de Ubuntu.

Debe usar los servicios ConsoleKit y UPower dbus para administrar el estado de energía

Apagar:

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

Gracias a los foros de Arch Linux .

Esto funciona por ahora en Precise y Quantal, pero no sé por cuánto tiempo ya que el enfoque de Freedesktop parece haber cambiado de ConsoleKit a systemd. No sé si a Canonical le importa ...

Epeli
fuente
4

Esto funciona en 14.04. Una variación actualizada de la respuesta correcta IMO anterior de 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 

Pega esto adentro:

[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
fuente
1

No hay forma de eludir la solicitud de una contraseña de superusuario al reiniciar mientras otros usuarios inician sesión antes de abrir una ventana de terminal y emitir el rebootcomando como root:

sudo reboot

Aún así, si no está configurado para omitir la sudosolicitud de contraseña para su cuenta de usuario, también le pedirá su contraseña.

No te preocupes, estas son cosas BUENAS. ¡El reinicio debería ser raro y un simple aviso de contraseña de administrador guarda accidentalmente la manguera!

jathanism
fuente
También puede editar visudo y hacer que su usuario no solicite la contraseña al escribir sudo.
Da1T
0

Creo que esto es solo un problema al hacerlo a través de la línea de comando.

Si es así, aquí hay un enlace que puede ayudarlo con su problema.

myusuf3
fuente
No, hay una ventana emergente que solicita la contraseña de administrador si hay otro usuario conectado cuando la cierra. Usando la interfaz gráfica de usuario.
Isaías
-1

Aparentemente, puede cerrar sin root desde la GUI porque gdm se ejecuta como root. Gnome le dice a gdm que se apague, y gdm lo hace.

Podrías hacer algo similar con un guión. No estoy seguro de lo útil que eres con BASH, pero creo que uno podría escribir un script que se ejecute como root y, cuando recibe una cierta señal, ejecuta el comando de apagado.

Tenga en cuenta que esto puede plantear un problema de seguridad.

Michael Crenshaw
fuente
Creo que el problema con el que probablemente se encontrará es el aviso que aparece avisando que otros todavía están conectados y que requieren una contraseña sudo para habilitar el apagado / reinicio.
David Thomas