8

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

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

shutdown -h now

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

shutdown: need to be root

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

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

Спасибо KC

3 ответа3

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

5

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

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

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

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

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .