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

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

9 ответов

Решение

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

Отредактируйте файл /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>

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

Ответ Ричарда Холлоуэя на самом деле не тот способ, которым должны предоставляться авторизации 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

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

Существует лучший способ. Если у вас установлен 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

С уважением.

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

Это работает 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

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

sudo reboot

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам