Jak mogę wyłączyć nie wymagając hasła administratora?

49

Jeśli na moim komputerze zalogowanych jest więcej niż jedna osoba, Ubuntu wymaga uwierzytelnienia superużytkownika podczas zamykania komputera. Jak mogę to zrobić, aby każdy użytkownik mógł zamknąć komputer bez pytania o hasło?

Izajasza
źródło
3
+1 Podejrzewam, że wpisanie hasła, aby zamknąć, denerwuje wielu użytkowników na komputerze domowym.
Richard Holloway,
7
Jeśli zamkniesz komputer, gdy inni są zalogowani, co stanie się z ich otwartymi oknami? Ich otwarte dokumenty? Myślę, że wszystko, co nie jest automatycznie zapisywane, jest po prostu stracone. Warto to rozważyć.
Torben Gundtofte-Bruun
„Ubuntu wymaga uwierzytelnienia superużytkownika podczas zamykania komputera”, w Ubuntu 11.10 nie prosi o autoryzację administratora, po wyłączeniu za pomocą menu działa tylko jako wylogowanie i prowadzi do strony logowania, jak w tym pytaniu: askubuntu.com/ q / 64073/11995 , jestem zainteresowany, jak skonfigurować Ubuntu, aby pytał mnie o hasło administratora?
Mikl,
1
14.04 i później: patrz askubuntu.com/questions/454039/...
Takkat

Odpowiedzi:

27

Nie potrzebujesz obejścia, po prostu zmień zasady, aby umożliwić zamknięcie bez uwierzytelniania jako administrator w celu zamknięcia i ponownego uruchomienia, gdy zalogowanych jest wielu użytkowników.

Edytuj plik /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy za pomocą swojego ulubionego edytora tekstu. Będziesz potrzebował uprawnień roota.

Zmień sekcję dotyczącą zamykania, gdy inni są zalogowani

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

do

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

oraz sekcję dotyczącą ponownego uruchamiania, gdy inni są zalogowani

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

do

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

Pozwoli to na zamknięcie i ponowne uruchomienie komputera, gdy zalogowanych jest wielu użytkowników. To, czy chcesz to zrobić, to inne pytanie.

Richard Holloway
źródło
1
Oto link do więcej na temat zestawu zasad: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway
4
Czy twoje zmiany nie zostaną usunięte, gdy polkit zostanie ponownie zainstalowany lub uaktualniony?
Ryan Thompson,
3
@Ryan, zgodnie z wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04 możesz napisać plik .pkla wewnątrz / etc / polkit-1 / localauthority, ale nie jestem pewien co do jego składni :) (kilka informacji tutaj wiki. archlinux.org/index.php/PolicyKit#Authorities )
Joril,
1
Odpowiedź poniżej z Flimm jest lepsza, nie zostanie napisana podczas aktualizacji askubuntu.com/a/251942/7472
Konstigt
1
Jak przeładować reguły bez restartu?
Suncatcher
33

Odpowiedź Richarda Hollowaya nie jest sposobem, w jaki mają być udzielane autoryzacje PolickKit. Pliki zainstalowane pod /usr/share/polkit-1/actionsnie są przeznaczone do modyfikacji. Zamiast tego należy zmodyfikować uprawnienia w obszarze /etc/polkit-1/localauthority/50-local.d/.

Oto jak to zrobić dla tego pytania:

Utwórz plik o nazwie /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklai edytuj go, sudoeditaby wyglądał tak:

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

Następnie utwórz kolejny .pklaplik w tym samym katalogu. Użyć dowolnej nazwy podoba Ci kończąc .pklana przykład allow_all_users_to_restart.pkla, i wypełnić go z tych treści:

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

Bibliografia:

Flimm
źródło
To okazało się rozwiązaniem bardzo dziwnego problemu. 12.04 po zainstalowaniu PowerBroker (w celu uwierzytelnienia w Active Directory) użytkownicy nie mogli zrestartować ani zamknąć komputera za pomocą GUI (ani lightdm, ani sesja wskaźnikowa nie działały. Po prostu powróciłby do ekranu logowania.) Po dodaniu tych uprawnień do policykit, wszystko działało.
korylprince
człowiek pklocalauthority ma informacje w Ubuntu
Konstigt
4
Pamiętaj, że nazwy się zmieniły teraz! Pochodzi z 14.04: / usr / share / polkit-1 / Actions $ grep multiple * org.freedesktop.login1.policy: <id działania = "org.freedesktop.login1.power-off-multiple-session"> org.freedesktop .login1.policy: <action id = "org.freedesktop.login1.reboot-multiple-session"> org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.suspend-multiple-session"> org .freedesktop.login1.policy: <id działania = "org.freedesktop.login1.hibernate-multiple-session">
Konstigt
1
Dla 16.04, oprócz zmian @ Konstigt, dla mnie pliki musiały być w, /var/lib/polkit-1/localauthority/50-local.da ResultAny=yesdla obu plików potrzebna była dodatkowa linia . Jedyny komunikat ostrzegawczy, który teraz dostaję, to Failed to set wall message, ignoring: Interactive authentication required.jednak zamknięcie i ponowne uruchomienie działa teraz poprawnie.
sigalor
Komentarz @ sigalor zadziałał dla mnie, z dodatkiem, który sysctl poweroff -iwymaga org.freedesktop.login1.power-off-multiple-sessions, więc utworzyłem osobny plik z tymi samymi wierszami, z wyjątkiemAction=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken
16

Jest lepszy sposób. Jeśli masz zainstalowany program dbus-send, możesz zamknąć system za pomocą dbus bez konieczności eskalacji do uprawnień administratora .

Nie pamiętam strony, na której znajduje się dokumentacja, ale jeden użytkownik Archlinux to zorientował.

Zamknąć:

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

Restart:

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

Wstrzymać, zawieszać:

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

Hibernować:

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

Pozdrowienia.

ibuclaw
źródło
Wow, to jest ... hacky. Niesamowite, ale
zuchwałe
1
Shutdown and Reboot wydaje się już nie działać w 11.10
Mikl
@Mikl spróbuj zainstalować hal (sudo apt-get install hal)
Epeli
12

Wygląda na to, że HAL jest już nieaktualny i nie jest zainstalowany w najnowszych wersjach Ubuntu.

Aby zarządzać stanem zasilania, musisz korzystać z usług ConsoleKit i UPower dbus

Zamknąć:

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

Uruchom ponownie:

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

Wstrzymać, zawieszać:

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

Hibernować:

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

Dzięki Arch Linux forach .

Działa to na razie w Precyzyjnym i Kwantowym, ale nie wiem, jak długo, odkąd Freedesktop wydaje się być przenoszony z ConsoleKit na systemd. Nie wiem, czy Canonical dba o ...

Epeli
źródło
4

Działa to w dniu 14.04. Zaktualizowana odmiana poprzedniej, IMO, poprawnej odpowiedzi 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 

Wklej to w środku:

[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
źródło
1

Nie ma możliwości obejścia monitu o podanie hasła administratora podczas ponownego uruchamiania, gdy inni użytkownicy są zalogowani bez otwierania okna terminala i wydawania rebootpolecenia jako root:

sudo reboot

Nawet jeśli nie skonfigurowano tak, aby pomijał sudomonit o podanie hasła do konta użytkownika, będzie również monitował o podanie hasła.

Nie martw się, to są DOBRE rzeczy. Ponowne uruchomienie powinno być rzadkie, a proste hasło administratora pozwala zaoszczędzić przypadkowego włamania!

jathanizm
źródło
Możesz także edytować visudo i sprawić, aby użytkownik nie pytał o hasło podczas pisania sudo.
Da1T
0

Uważam, że jest to tylko problem podczas robienia tego za pomocą wiersza poleceń.

Jeśli tak, to link, który może pomóc w rozwiązaniu problemu.

myusuf3
źródło
Nie, jest wyskakujące okienko z pytaniem o hasło administratora, jeśli podczas zamykania jest zalogowany inny użytkownik. Korzystanie z GUI.
Izajasza
-1

Najwyraźniej jesteś w stanie zamknąć się bez roota z GUI, ponieważ gdm działa jako root. Gnome mówi gdm, aby się zamknął, a gdm to robi.

Możesz zrobić coś podobnego za pomocą skryptu. Nie jestem pewien, jak przydatny jesteś w BASH, ale uważam, że można napisać skrypt działający jako root, a gdy otrzyma określony sygnał, uruchomi polecenie shutdown.

Pamiętaj, że może to stanowić problem z bezpieczeństwem.

Michael Crenshaw
źródło
Myślę, że problem, z którym prawdopodobnie się spotka, to komunikat, który sugeruje, że inni są nadal zalogowani, i wymaga hasła sudo, aby umożliwić zamknięcie / ponowne uruchomienie.
David Thomas