Как я могу сделать выключение без пароля администратора?


49

Если на моем компьютере зарегистрировано более одного человека, при выключении компьютера в Ubuntu требуется аутентификация суперпользователя. Как я могу сделать так, чтобы любой пользователь мог выключить компьютер без запроса пароля?


3
+1 Я подозреваю, что ввод пароля для отключения раздражает многих пользователей на домашнем ПК.
Ричард Холлоуэй

7
Если вы выключаете компьютер, когда другие пользователи входят в систему, что происходит с их открытыми окнами? Их открытые документы? Я думаю, что все, что не сохраняет автоматически, просто потеряно. Это стоит рассмотреть.
Торбен Гундтофте-Бруун

«Ubuntu требует аутентификации суперпользователя при выключении компьютера», в Ubuntu 11.10 он не запрашивает авторизацию суперпользователя, при выключении с помощью меню он работает только как выход из системы и приводит к странице входа, как в этом вопросе: askubuntu.com/ q / 64073/11995 , мне интересно, как настроить Ubuntu для запроса пароля суперпользователя?
Микл

1
Для 14.04 и более поздних версий
Таккат

Ответы:


27

Обходной путь не требуется, просто измените политику, чтобы разрешить выключение без аутентификации администратора для выключения и перезагрузки, когда в систему вошли несколько пользователей.

Отредактируйте файл /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy, используя ваш любимый текстовый редактор. Вам понадобятся права суперпользователя.

Измените раздел, касающийся выключения, когда другие пользователи вошли в систему с

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

в

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

и раздел, касающийся перезагрузки, когда другие пользователи входят в систему с

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

в

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

И это позволит вам выключить и перезагрузить компьютер, когда в систему войдут несколько пользователей. Хотите ли вы это сделать, это другой вопрос.


1
Вот ссылка с дополнительной информацией о policykit: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Ричард Холлоуэй,

4
Не будут ли ваши изменения уничтожены при переустановке или обновлении polkit?
Райан Томпсон

3
@Ryan, согласно wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04, вы можете написать файл .pkla внутри / etc / polkit-1 / localauthority, но я не уверен насчет его синтаксиса :) (некоторая информация здесь, вики. archlinux.org/index.php/PolicyKit#Authorities )
Joril

1
Ответ ниже от Flimm лучше, не будет переписан во время обновления askubuntu.com/a/251942/7472
Konstigt

1
Как перезагрузить правила без перезагрузки?
Suncatcher

33

Ответ Ричарда Холлоуэя на самом деле не тот способ, которым должны предоставляться авторизации PolickKit. Установленные файлы /usr/share/polkit-1/actionsне предназначены для изменения. Вместо этого вы должны изменить полномочия в соответствии с /etc/polkit-1/localauthority/50-local.d/.

Вот как вы делаете это для этого вопроса:

Создайте файл с именем /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklaи отредактируйте его, используя sudoeditвид:

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

Затем создайте другой .pklaфайл в том же каталоге. Используйте любое имя, которое вам нравится .pkla, например, заканчивая allow_all_users_to_restart.pkla, и заполните его следующим содержанием:

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

Рекомендации:


Это оказалось решением очень странной проблемы. 12.04 после установки PowerBroker (для аутентификации в Active Directory) пользователи не могли вообще перезагружать или выключать компьютер с графическим интерфейсом (ни lightdm, ни индикатор-сессия не работали. Он просто возвращался к экрану входа в систему.) После добавления этих разрешений в policykit, все работало.
korylprince

У человека pklocalauthority есть информация в Ubuntu
Konstigt

4
Обратите внимание, что имена изменились сейчас! Это от 14.04: / usr / share / polkit-1 / actions $ grep множественный * org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.power-off-множественные сеансы"> org.freedesktop .login1.policy: <action id = "org.freedesktop.login1.reboot-множественные сеансы"> org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.suspend-множественные сеансы"> org .freedesktop.login1.policy: <action id = "org.freedesktop.login1.hibernate-множественные сеансы">
Konstigt

1
На 16.04, в дополнение к изменениям @ Konstigt, для меня должны были быть файлы, /var/lib/polkit-1/localauthority/50-local.dи ResultAny=yesдля обоих файлов была необходима дополнительная строка . Единственное предупреждающее сообщение, которое я сейчас получаю, - это то Failed to set wall message, ignoring: Interactive authentication required., что выключение и перезапуск работает правильно.
sigalor

Комментарий @ sigalor работал для меня, с добавлением, которое sysctl poweroff -iтребует org.freedesktop.login1.power-off-multiple-sessions, поэтому я сделал отдельный файл с теми же строками, кроме:Action=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken

16

Существует лучший способ. Если у вас установлен dbus-send, вы можете завершить работу через dbus без необходимости повышать привилегии root .

Я не могу вспомнить страницу, где находится документация, но один пользователь Archlinux понял это.

Неисправность:

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

Перезагрузка:

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

Приостановка:

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

С уважением.


Вау, это ... хак. Удивительно, но хакерски ...
jathanism

1
Завершение работы и перезагрузка, кажется, больше не работают в 11.10
Mikl

@Mikl попробуй установить hal (sudo apt-get install hal)
Epeli

12

HAL, похоже, устарела и не установлена ​​в последних выпусках Ubuntu.

Для управления состоянием электропитания необходимо использовать службы ConsoleKit и UPower dbus.

Неисправность:

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

Запустить снова:

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

Приостановка:

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

Благодаря форумам Arch Linux .

Сейчас это работает в Precise и Quantal, но не знаю, как долго, с тех пор как фокус Freedesktop, кажется, смещается с ConsoleKit на systemd. Не знаю, заботится ли Canonical ...


4

Это работает 14.04. Обновленный вариант предыдущего, IMO, правильный ответ от 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 

Вставьте это внутри:

[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

Невозможно обойти запрос пароля суперпользователя при перезагрузке, в то время как другие пользователи вошли в систему, не открыв окно терминала и не выполнив rebootкоманду от имени root:

sudo reboot

Даже если вы не настроили обход пароля для вашей учетной записи, вам sudoтакже будет предложено ввести пароль.

Не волнуйтесь, это ХОРОШИЕ вещи. Перезагрузка должна быть редкой, и простая подсказка пароля администратора спасет вас от случайного попадания!


Вы также можете редактировать visudo и запретить пользователю вводить пароль при вводе sudo.
Da1T

0

Я считаю, что это проблема только при выполнении через командную строку.

Если это так, вот ссылка, которая может помочь с вашей проблемой.


Нет, есть всплывающее окно, которое запрашивает пароль администратора, если при его закрытии вошел другой пользователь. Используя графический интерфейс.
Исаия

0

Добавьте остановку и / или перезагрузку в файл sudoers, назначенный группе / пользователю, которому вы хотите разрешить выполнение этой задачи. Таким образом, вы все еще можете контролировать, кто может завершить работу, но не предоставляя им полный root-доступ к машине.

http://linux.byexamples.com/archives/315/how-to-shutdown-and-reboot-without-sudo-password/


-1

По-видимому, вы можете завершить работу без root из графического интерфейса, потому что gdm работает от имени пользователя root. Gnome говорит GDM, чтобы закрыть, и GDM делает это.

Вы можете сделать что-то подобное с помощью скрипта. Я не уверен, насколько вы удобны с BASH, но я считаю, что можно написать сценарий, который запускается от имени пользователя root и, когда он получает определенный сигнал, запускает команду завершения работы.

Имейте в виду, что это может создать проблему безопасности.


Я думаю, что проблема, с которой он может столкнуться, заключается в том, что появляется подсказка о том, что другие пользователи все еще вошли в систему, и требуется пароль sudo для включения выключения / перезапуска.
Дэвид Томас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.