Когда мы устанавливаем / удаляем / обновляем пакеты или вносим какие-либо изменения, которые требуют административных привилегий, у нас запрашивается пароль администратора, который имеет эти sudo
привилегии - это происходит как через графический интерфейс, так и через терминал.
Однако, если мы пытаемся выключить и перезапустить через терминал, он жалуется, что мы должны быть root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Но нас никогда не просят ввести пароль, когда мы выполняем эти действия с помощью зубчатого колеса в правом верхнем углу.
Почему это несоответствие?
sudo
shutdown
restart
privileges
Адитья
источник
источник
sudo shutdown -h now
но проблема заключалась в том, что без разрешения доступаshutdown
она никогда не работает. Потому что, где и как она попросит ввести пароль после нажатия сочетания клавиш .. Надеюсь, вы понимаете мою ситуацию .. :)Ответы:
Выключение на зубчатом колесе проверяет, разрешено ли отключение машины. Это делается с помощью PolicyKit. В случае отключения этот оператор в файле
/usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
проверяется:PolicyKit запускает
dbus-send
команду. В случае отключения это будет:В фоновом режиме работает демон с привилегиями root, который вызывает команду выключения для вас.
Если вы хотите иметь возможность завершить работу машины «по-старому» через командную строку (
shutdown, reboot, halt, ...
), вам необходимо добавить бит suid к этим командам. Но имейте в виду, что каждый в вашей системе, имеющий доступ к оболочке, может отключить вашу машину.источник
sudo visudo
, добавить%sudo ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot
, сохранить и выйти. Таким образом, перезагрузка из командной строки все еще потребуетsudo reboot
, но вам не нужно будет вводить пароль.Ubuntu - это дистрибутив операционной системы GNU / Linux, которая, в свою очередь, принадлежит к семейству систем Unix - общей архитектуры для ряда современных операционных систем.
Традиционно Unix используется для работы на мэйнфреймах. Центральные вычислительные средства, которые обслуживают десятки или сотни пользователей через удаленные терминалы. Поскольку все пользователи полагались на доступность мэйнфрейма, ни одному из пользователей не разрешалось выдавать команду отключения. Идея, которая является фундаментальной для архитектуры Unix - ядро системы никогда не инициализирует выключение, если соответствующая функция не вызывается процессом суперпользователя.
В современных настольных системах разработчики приложили определенные усилия, чтобы сделать отключение доступным для простого пользователя настольного компьютера. Обычный метод - позволить менеджеру входа в систему, который обычно работает в контексте безопасности пользователя root, обрабатывать завершение работы и перезагрузку. В этом случае графическая оболочка выдает диспетчеру входа запрос на выключение компьютера. Это предполагает использование межпроцессного взаимодействия (IPC), как правило, через службу dbus.
Упомянутый выше набор политик расширяет этот процесс, предоставляя стандартизированную структуру, посредством которой менеджер входа в систему (или любая другая программа, предоставляющая службу выключения) может проверять, каким пользователям разрешено вызывать завершение работы, и через которого администратор может настраивать эти разрешения соответственно.
В некоторых средах рабочего стола не используются службы на основе IPC, а скорее набор вспомогательных программ для обеспечения тех же или аналогичных функций. Эти вспомогательные программы будут вызываться через механизмы, позволяющие переходить в контекст суперпользователя, например, sudo, suid или механизм набора политик, подобный sudo.
В любом случае, глупая традиционная программа выключения на оболочке не работает таким образом, она требует, чтобы вы видели, что она запускается в контексте суперпользователя.
источник
Поскольку Linux обычно используется как сервер или аналогичный, а SSHing в Linux-коробку, даже обычный ноутбук с Ubuntu, довольно распространен.
Дело в том, что вы, возможно, не захотите, чтобы люди с доступом по SSH могли его отключить, особенно когда могут быть другие удаленно вошедшие пользователи, использующие его. Кто-то, имеющий доступ к графическому интерфейсу, может в любом случае отключить его самостоятельно с помощью кнопки физического питания.
Кроме того, удаленно вошедший в систему пользователь не сможет включить его снова.
источник
Только если вы единственный, кто вошел в систему. Если есть другие пользователи (включая пользователей консоли), вам может потребоваться ввести пароль root. Это то же самое на OS X и более новых версиях Windows.
Следующая команда:
Почему
shutdown
команда не просто проверяет, вошел ли кто-либо в систему? Честно говоря, эта черта кажется наемницей. Я могу себе представить, что это иногда экономит время, но часто предпочитают последовательную консоль. Я не хочу, чтобы команды иногда запрашивали пароль после запуска, а иногда нет.Мои местоимения Он / Он
источник
sudo
пароль root / user ни с другим пользователем, вошедшим в систему через GDM, ни с другим пользователем, вошедшим через tty.Причина, по которой вам не нужно быть пользователем root, чтобы инициировать завершение работы с графическим интерфейсом, во многом зависит от удобства обычного пользователя настольного компьютера. Система знает, что вы - пользователь, вошедший в консоль, поэтому, если вы выключите компьютер по ошибке, вы, вероятно, сможете снова включить его.
Для пользователя в оболочке вы можете войти в систему удаленно, поэтому система требует, чтобы вы вошли в систему как пользователь root, чтобы выдать команду завершения работы. Это препятствует тому, чтобы обычный пользователь, вошедший в систему на сервере, отключил его, когда его используют другие люди, и хотя не обязательно, чтобы кто-либо физически присутствовал, чтобы запустить компьютер обратно.
Причиной того, что завершение работы не предоставляет приглашение с графическим интерфейсом для пароля суперпользователя, вероятно, является просто то, что там нет никакой реальной утилиты, которую можно получить - если вы находитесь на консоли, где появится приглашение, вы можете просто использовать cog- вместо колесного меню. Если вы хотите, чтобы в командной строке запрашивался пароль суперпользователя для выключения, он уже доступен с «sudo shutdown».
источник
В многопользовательской системе последнее, что вам нужно, - это чтобы ваши пользователи входили в систему и могли произвольно перезагрузить сервер в любое время, поэтому версия Reboot для командной строки - это команда только для суперпользователя, поэтому вам нужно быть пользователем root или иметь права sudo.
То же самое касается команд Halt и PowerOff.
источник