Якщо на моєму комп'ютері зареєстровано більше однієї людини, Ubuntu під час вимкнення комп'ютера вимагає супер автентифікації користувача. Як я можу зробити так, щоб будь-який користувач міг вимкнути комп'ютер, не вимагаючи пароля?
Якщо на моєму комп'ютері зареєстровано більше однієї людини, Ubuntu під час вимкнення комп'ютера вимагає супер автентифікації користувача. Як я можу зробити так, щоб будь-який користувач міг вимкнути комп'ютер, не вимагаючи пароля?
Відповіді:
Ви не потребуєте вирішення проблеми, просто змініть політику, щоб дозволити вимкнути її без автентифікації як адміністратора для вимкнення та перезавантаження, коли кілька користувачів входять у систему.
Відредагуйте файл /usr/share/polkit-1/action/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
Спять:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate
З повагою
Здається, що HAL тепер відмежований і не встановлений в останніх випусках Ubuntu.
Для керування станом живлення потрібно використовувати сервіси dbus-послуг ConsoleKit та UPower
Закрити:
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
Спять:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Завдяки форумам Arch Linux .
Наразі це працює в Precision і 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
також запропонує вам ввести свій пароль.
Не хвилюйтесь, це добрі речі. Перезавантаження повинно бути рідкісним, а просте підказка адміністратора дозволяє економити випадкові шланги!
Я вважаю, що це лише проблема, коли це робиться через командний рядок.
Якщо так, ось посилання, яке може допомогти у вирішенні вашої проблеми.
Додайте зупинку та / або перезавантажте файл судорів, призначений групі / користувачеві, якому ви хочете дозволити виконання цього завдання. Таким чином, ви все ще можете контролювати, хто може відключити, але не надаючи їм повного доступу до машини.
http://linux.byexamples.com/archives/315/how-to-shutdown-and-reboot-without-sudo-password/
Мабуть, ви можете вимкнути без кореневих файлів GUI, оскільки gdm працює як root. Gnome каже gdm закрити, а gdm робить це.
Ви могли зробити щось подібне зі сценарієм. Я не впевнений, наскільки ви корисні з BASH, але я вважаю, що можна написати сценарій, який працює як root, і, коли він отримає певний сигнал, виконує команду відключення.
Майте на увазі, що це може створювати проблеми із безпекою.