Если на моем компьютере зарегистрировано более одного человека, при выключении компьютера в Ubuntu требуется аутентификация суперпользователя. Как я могу сделать так, чтобы любой пользователь мог выключить компьютер без запроса пароля?
Если на моем компьютере зарегистрировано более одного человека, при выключении компьютера в Ubuntu требуется аутентификация суперпользователя. Как я могу сделать так, чтобы любой пользователь мог выключить компьютер без запроса пароля?
Ответы:
Обходной путь не требуется, просто измените политику, чтобы разрешить выключение без аутентификации администратора для выключения и перезагрузки, когда в систему вошли несколько пользователей.
Отредактируйте файл /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
/var/lib/polkit-1/localauthority/50-local.d
и ResultAny=yes
для обоих файлов была необходима дополнительная строка . Единственное предупреждающее сообщение, которое я сейчас получаю, - это то Failed to set wall message, ignoring: Interactive authentication required.
, что выключение и перезапуск работает правильно.
sysctl poweroff -i
требует org.freedesktop.login1.power-off-multiple-sessions
, поэтому я сделал отдельный файл с теми же строками, кроме:Action=org.freedesktop.login1.power-off-multiple-sessions
Существует лучший способ. Если у вас установлен 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 и, когда он получает определенный сигнал, запускает команду завершения работы.
Имейте в виду, что это может создать проблему безопасности.