Разрешение на отключение Linux


8

Предположим, вы устанавливаете среду рабочего стола, скажем, Ubuntu или Debian. Вы можете выключить систему, нажав кнопку где-нибудь в системном меню обычного пользователя. Вам не нужно переключаться на суперпользователя, чтобы выполнить это.

Однако в той же среде рабочего стола, если я открою терминал (скажем, gnome-терминал) как обычный пользователь, и введите

shutdown -h now

Мне бы подсказали

shutdown: need to be root

Единственный способ завершить работу - добавить команду с помощью sudo.

Кто-нибудь может объяснить, почему это так?

Спасибо KC


Ответы:


8

Вопрос, заданный К.Ченом: зачем мне привилегии sudo, когда я делаю это из CLI, но мне не нужны такие привилегии, когда я делаю это из GUI.

Первая часть ответа заключается в том, что люди, которые разрабатывают среды рабочего стола, такие как Gnome, KDE, Xfce, Mate, Cinnamon, ... пытаются упростить работу своих пользователей, и они настраивают выключение и перезагрузку, не требуя учетных данных sudo. Это, между прочим, подразумевает, что должна быть последовательность завершения работы, которая не включает в себя завершение работы программы, которая требует привилегий sudo (никак не обойти это).

Я не знаю подробно, как это делает каждый DE, но я знаю, что есть мягкий способ выключить или перезапустить / выключить / перевести вашу систему в режим ожидания, который не требует привилегий root. Вы можете найти оригинальное сообщение в сообщении Arch Linux Forum . По сути, это сводится к выдаче этих команд:

стой

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

перезагрузка

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

DBus приостановить

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

спящий режим

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

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


1
Если кто-то удаленно входит в систему на компьютере, на котором также запущена среда рабочего стола, может ли он или она выполнить эти команды и успешно завершить работу / перезагрузить / приостановить / перевести в спящий режим?
Gerrit

В этом вопросе есть вредоносная сторона, я считаю, что следует проявить некоторую осмотрительность.
MariusMatutiae

1
Почему злой? Если им можно злоупотреблять, сисопы должны знать, а затем знать, как защититься от него.
Gerrit

Я не говорю, что вы злонамеренны, но эта информация может быть использована злонамеренно. Я уже сожалею о том, что поделился этим ... Возможно, мне следовало поступить как @Matteo
MariusMatutiae

5

Причиной такого решения является не техническая (вы можете иметь непривилегированную shutdownкоманду или запросить пароль в графическом интерфейсе).

  • При использовании рабочего стола пользователь должен иметь физический доступ к машине. Тогда лучше разрешить чистое отключение, чем позволить пользователю нажимать кнопку питания или отключать шнур питания.

  • При использовании оболочки пользователь может быть удаленным пользователем, и во избежание удаленного отключения запрашиваются дополнительные привилегии.

Это не правила, а просто значения по умолчанию, основанные на предположениях: вы можете иметь локального пользователя в оболочке и удаленного пользователя в среде рабочего стола. Если вы хотите выбрать поведение по умолчанию, вы можете настроить свою систему соответствующим образом.


Я понимаю вашу точку зрения, @Matteo. Но, как сказал MariusMatutiae, DE должен был вызывать какую-то другую программу, кроме «shutdown», для выключения без привилегий суперпользователя. У вас есть какие-либо подсказки, что это?
К.Чен

1

Sudo (superuser do) позволяет системному администратору предоставлять определенным пользователям (или группам пользователей) возможность выполнять некоторые (или все) команды от имени пользователя root при регистрации всех команд и аргументов. Команда shutdown -h или команда init 0 могут использоваться для выключения машины. Но для выполнения обеих команд требовалась привилегия root.

Команда, которая находится в / sbin, должна иметь привилегию root для ее выполнения. Для нахождения местоположения команды выключения,

Тип, который отключение в терминале.

Надеюсь, теперь ваши сомнения ясны :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.