Как я могу сделать выключение без пароля администратора?
Если на моем компьютере зарегистрировано более одного человека, при выключении компьютера в 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 и, когда он получает определенный сигнал, запускает команду завершения работы.
Имейте в виду, что это может создать проблему безопасности.