Як зробити так, щоб для відключення не потрібен пароль адміністратора?


49

Якщо на моєму комп'ютері зареєстровано більше однієї людини, Ubuntu під час вимкнення комп'ютера вимагає супер автентифікації користувача. Як я можу зробити так, щоб будь-який користувач міг вимкнути комп'ютер, не вимагаючи пароля?


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

7
Якщо ви вимкнете комп’ютер під час входу в систему, що відбувається з їх відкритими вікнами? Їх відкриті документи? Я думаю, що все, що не зберігається автоматично, просто втрачається. Це варто врахувати.
Torben Gundtofte-Bruun

"Ubuntu вимагає супер автентифікації користувача при вимкненні комп'ютера", в Ubuntu 11.10 він не вимагає авторизації суперпользователя, при відключенні за допомогою меню він працює лише як вихід та переходить на сторінку входу, як у цьому питанні: askubuntu.com/ q / 64073/11995 , мене цікавить, як налаштувати Ubuntu на запит пароля суперпользователя?
Мікл

1
Для 14.04 та пізніших версій: див. Askubuntu.com/questions/454039/…
Таккат

Відповіді:


27

Ви не потребуєте вирішення проблеми, просто змініть політику, щоб дозволити вимкнути її без автентифікації як адміністратора для вимкнення та перезавантаження, коли кілька користувачів входять у систему.

Відредагуйте файл /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>

І це дозволить вам відключити та перезавантажити ПК, коли ввійти кілька користувачів. Чи ви хочете це зробити - це інше питання.


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, але я не впевнений у його синтаксисі :) (деяку інформацію тут wiki. archlinux.org/index.php/PolicyKit#Authorities )
Йоріл

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) користувачі не змогли перезапустити або вимкнути комп'ютер взагалі за допомогою GUI (не працював ні lightdm, ні сеанс індикатора. Він би просто повернувся на екран входу.) Після додавання цих дозволів до policykit, все спрацювало.
korylprince

man pklocalauthority має інформацію в Ubuntu
Konstigt

4
Зауважте, що назви зараз змінилися! Це з 14.04: / usr / share / polkit-1 / action $ grep multiple * org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.power-off-multiple-session"> org.freedesktop .login1.policy: <action id = "org.freedesktop.login1.reboot-multiple-session"> org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.suspend-multiple-session"> org .freedesktop.login1.policy: <action id = "org.freedesktop.login1.hibernate-multiple-
session

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

Коментар @ 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

Спять:

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

З повагою


Нічого собі, це ... хакі. Дивовижний, але хакітний ...
ятанізм

1
Вимкнення та перезавантаження, здається, більше не працює в 11.10
Mikl

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

12

Здається, що 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 ...


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також запропонує вам ввести свій пароль.

Не хвилюйтесь, це добрі речі. Перезавантаження повинно бути рідкісним, а просте підказка адміністратора дозволяє економити випадкові шланги!


Ви також можете редагувати візуально і робити так, щоб користувач не вводив запит на введення пароля під час введення sudo.
Da1T

0

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

Якщо так, ось посилання, яке може допомогти у вирішенні вашої проблеми.


Ні, є спливаюче вікно, яке запитує пароль адміністратора, якщо інший користувач увійшов, коли ви закрили його. Використання гуї.
Ісая

0

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

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


-1

Мабуть, ви можете вимкнути без кореневих файлів GUI, оскільки gdm працює як root. Gnome каже gdm закрити, а gdm робить це.

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

Майте на увазі, що це може створювати проблеми із безпекою.


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