Come posso fare in modo che l'arresto non richieda la password dell'amministratore?


49

Se più di una persona ha effettuato l'accesso sul mio computer, Ubuntu richiede l'autenticazione da superutente quando si spegne il computer. Come posso fare in modo che qualsiasi utente possa spegnere il computer senza che sia richiesta una password?


3
+1 Sospetto che l'immissione di una password per l'arresto infastidisca molti utenti su un PC di casa.
Richard Holloway,

7
Se si spegne un computer mentre altri sono connessi, cosa succede alle loro finestre aperte? I loro documenti aperti? Penso che tutto ciò che non si salva automaticamente venga semplicemente perso. Questo vale la pena considerare.
Torben Gundtofte-Bruun,

"Ubuntu richiede l'autenticazione del superutente quando si spegne il computer", in Ubuntu 11.10 non richiede l'autorizzazione del superutente, quando si arresta utilizzando il menu, funziona solo come logout e porta alla pagina di accesso, come in questa domanda: askubuntu.com/ q / 64073/11995 , sono interessato a come configurare Ubuntu per chiedermi una password superutente?
Mikl,

1
Per il 14.04 e successivi: vedi askubuntu.com/questions/454039/…
Takkat,

Risposte:


27

Non è necessaria una soluzione alternativa, è sufficiente modificare il criterio per consentire l'arresto senza eseguire l'autenticazione come amministratore per l'arresto e il riavvio quando si accedono più utenti.

Modifica il file /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy usando il tuo editor di testo preferito. Avrai bisogno dei permessi di root.

Modificare la sezione relativa allo spegnimento quando altri sono connessi

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

per

  <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 la sezione relativa al riavvio quando altri sono connessi

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

per

  <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 ciò ti permetterà di spegnere e riavviare il PC quando più utenti hanno effettuato l'accesso. Se vuoi farlo è una domanda diversa.


1
Ecco un link con ulteriori informazioni su policykit: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway,

4
Le tue modifiche non verranno cancellate ogni volta che Polkit viene reinstallato o aggiornato?
Ryan Thompson,

3
@Ryan, secondo wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04 potresti scrivere un file .pkla all'interno di / etc / polkit-1 / localauthority, ma non sono sicuro della sua sintassi :) (alcune informazioni qui wiki. archlinux.org/index.php/PolicyKit#Authorities )
Joril

1
La risposta di seguito da Flimm è migliore, non verrà sovrascritta
Konstigt

1
Come ricaricare le regole senza riavviare?
Suncatcher

33

La risposta di Richard Holloway non è in realtà il modo in cui le autorizzazioni PolickKit devono essere concesse. I file installati in /usr/share/polkit-1/actionsnon sono pensati per essere modificati. Invece, è necessario modificare le autorizzazioni in /etc/polkit-1/localauthority/50-local.d/.

Ecco come lo fai per questa domanda:

Crea un file chiamato /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklae modificalo usando sudoeditper assomigliare a questo:

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

Quindi creare un altro .pklafile nella stessa directory. Usa qualsiasi nome che ti piace terminare .pkla, ad esempio allow_all_users_to_restart.pkla, e riempilo con questi contenuti:

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

Riferimenti:


Questa si è rivelata la soluzione per un problema molto strano. Il 12.04 dopo l'installazione di PowerBroker (per l'autenticazione in Active Directory), gli utenti non potevano riavviare o arrestare affatto un computer con la GUI (né lightdm né la sessione degli indicatori funzionavano. Sarebbe semplicemente tornato alla schermata di accesso.) Dopo aver aggiunto queste autorizzazioni a policykit, tutto ha funzionato.
korylprince,

man pklocalauthority ha le informazioni in Ubuntu
Konstigt,

4
Nota che i nomi sono cambiati ora! Questo è del 14.04: / usr / share / polkit-1 / actions $ grep multiple * org.freedesktop.login1.policy: <id id = "org.freedesktop.login1.power-off-multiple-sessioni"> org.freedesktop .login1.policy: <action id = "org.freedesktop.login1.reboot-multiple-sessioni"> org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.suspend-multiple-session"> org .freedesktop.login1.policy: <action id = "org.freedesktop.login1.hibernate-multiple-sessioni">
Konstigt

1
Per il 16.04, oltre alle modifiche di @ Konstigt, per me i file dovevano essere presenti /var/lib/polkit-1/localauthority/50-local.de la linea aggiuntiva ResultAny=yesera necessaria per entrambi i file. L'unico messaggio di avviso che ora ricevo è Failed to set wall message, ignoring: Interactive authentication required., ma l'arresto e il riavvio ora funzionano correttamente.
sigalor

Il commento di @ sigalor ha funzionato per me, con l'aggiunta che sysctl poweroff -irichiede org.freedesktop.login1.power-off-multiple-sessions, quindi ho creato un file separato con le stesse righe tranne conAction=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken

16

C'è un modo migliore Se dbus-send è installato, è possibile arrestare tramite dbus senza la necessità di passare ai privilegi di root .

Non ricordo la pagina in cui si trova la documentazione, ma un utente Archlinux l'ha capito.

Spegnimento:

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

Reboot:

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

Sospendere:

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

Hibernate:

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

Saluti.


Wow, questo è ... hacky. Fantastico, ma
burrascoso

1
L'arresto e il riavvio sembrano non funzionare più nell'11.10
Mikl il

@Mikl prova a installare hal (sudo apt-get install hal)
Epeli,

12

HAL sembra ora essere depcrecato e non installato nelle ultime versioni di Ubuntu.

È necessario utilizzare i servizi dbus ConsoleKit e UPower per gestire lo stato di alimentazione

Spegnimento:

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

Ricomincia:

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

Sospendere:

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

Hibernate:

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

Grazie ai forum di Arch Linux .

Questo funziona per ora in Precise e Quantal, ma non so per quanto tempo da quando l'attenzione di Freedesktop sembra essere spostata da ConsoleKit a systemd. Non so se la cura canonica ...


4

Funziona il 14.04. Una variante aggiornata della precedente, IMO, risposta corretta di 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 

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

1

Non è possibile eludere la richiesta di una password del superutente quando si riavvia mentre altri utenti accedono prima di aprire una finestra del terminale ed emettere il rebootcomando come root:

sudo reboot

Anche se, se non configurato per bypassare la richiesta di password per il tuo account utente, sudoti chiederà anche la password.

Non preoccuparti, queste sono cose BUONE. Il riavvio dovrebbe essere raro e una semplice richiesta per la password dell'amministratore salva accidentalmente te stesso!


Puoi anche modificare visudo e impedire all'utente di richiedere la password durante la digitazione di sudo.
Da1T

0

Credo che questo sia solo un problema quando lo si fa attraverso la riga di comando.

In tal caso, ecco un link che può aiutarti a risolvere il tuo problema.


No, è presente una finestra popup che richiede la password dell'amministratore se è presente un altro utente che ha effettuato l'accesso al momento della chiusura. Usando la gui.
Isaia,


-1

Apparentemente, puoi chiudere senza root dalla GUI perché gdm funziona come root. Gnome dice a gdm di chiudere, e gdm lo fa.

Potresti fare qualcosa di simile con una sceneggiatura. Non sono sicuro di quanto tu sia a tuo agio con BASH, ma credo che si possa scrivere uno script che funziona come root e, quando riceve un certo segnale, esegue il comando shutdown.

Tieni presente che ciò può comportare un problema di sicurezza.


Penso che il problema che probabilmente incontrerà è la richiesta che avvisa che altri sono ancora connessi e che richiede una password sudo per abilitare l'arresto / riavvio.
David Thomas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.