6

Зачем мне нужен root, чтобы выключать / перезагружать мой компьютер из терминала? Для этого через меню GUI не требуются права суперпользователя.

4 ответа4

10

Обычно ОС запускает при запуске службу, которая запускается от имени пользователя root, и предлагает настольным средам некоторые возможности относительно компьютера. Обычно это либо ConsoleKit, либо systemd-logind.

Например, в KDE вы можете выключить компьютер из командной строки как обычный пользователь с помощью чего-то вроде:

qdbus org.kde.ksmserver /KSMServer logout 0 0 0

Это возможно потому, что менеджер сеансов KDE свяжется со службой DBus, которая работает от имени пользователя root, и при вызове запустит команду shutdown с привилегиями root.

В системах с ConsoleKit вы можете использовать:

gdbus call -y -d org.freedesktop.ConsoleKit \
              -o /org/freedesktop/ConsoleKit/Manager \
              -m org.freedesktop.ConsoleKit.Manager.Stop

В системах, использующих systemd-logind, утилита shutdown уже использует DBus и не требует привилегий.

Подводя итог, вы можете выключить компьютер как обычный пользователь, поскольку в среде рабочего стола запускается служба, которая предлагает возможность запуска команды shutdown [1] от имени пользователя root.

[1] На самом деле служба выполняет другие функции, чтобы обеспечить правильное завершение рабочего стола.

1

В дополнение к меню GUI вы также можете выключить Linux из текстовой консоли. Что общего с GUI, так это то, что пользователь, выполняющий команду, почти наверняка имеет физический доступ. (Для исключительных ситуаций, когда это не так, например, в общественных киосках, его можно отключить.)

Предполагается, что пользователь произвольного сеанса TTY не имеет физического доступа; это форма удаленного доступа. Нет никакого способа сообщить о завершении через произвольный сеанс TTY, будь то локальный xterm, фактический терминал на последовательной линии или сеанс ssh. Вы должны доказать, что у вас есть привилегия, эквивалентная физическому доступу, став пользователем root.

Если неаутентифицированные или непривилегированные пользователи могут удаленно перезагрузить систему, это будет проблемой безопасности.

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

Графический эмулятор терминала, такой как xterm, не является удаленным, но операционная система этого не знает. Приложение реализовано с использованием псевдо TTY. Это виртуальное устройство TTY, которое операционная система (по большей части) не отличает от реального TTY. Если вы stty в сеансе xterm или ssh, вы заметите, что у вас есть скорость передачи данных, например 9600 или 38400, и вы можете переключать управление потоком xon/xoff или даже cts/rts. Теоретически, псевдо TTY могут иметь специальный протокол сигнализации перезагрузки между ведущим и ведомым, который недоступен в обычных TTY, но они этого не делают. (На самом деле, xterm может быть удаленным, поскольку это X-клиентское приложение, которое можно перенаправить для создания его окон на удаленном X-сервере.)

(Не уверен, что означает "терминал" в вопросе; в Linux такого нет.)

1

Представьте, что ваш компьютер является общим сервером веб-хостинга, где каждому пользователю предоставляется доступ по SSH. В такой настройке около 500 пользователей на один сервер.

Нужно ли кому-либо действительно перезагружать весь сервер, прерывать загрузку HTTP, прерывать сеансы SSH и т.д.?

1

Несколько причин из головы:

  • варианты командной строки могут быть сценариями, следовательно, вредоносный сценарий может быть внедрен и вызывать очень неприятные вещи (DoS-атака и т. д.).
  • Меню с графическим интерфейсом пользователя безопасно: не допускает неприятных событий (например, принудительная перезагрузка - все бросает в воздух)
  • Меню графического интерфейса пользователя простое: не путайте пользователей с мощными опциями администратора, такими как подробное ведение журнала, дополнительная отправка сообщений всем зарегистрированным пользователям, отложенное завершение работы, разница между остановкой, режимом обслуживания и т.д.
  • Графическое меню простое и означает: не работает "по-разному" в соответствии с уровнями выполнения системы (0, 6 и т.д.), Выполняющими различные сценарии (например, /sbin /shutdown) и / или в соответствии с различными переключателями / параметрами, введенными из команды линия

НТН

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