Зачем мне нужен root, чтобы выключать / перезагружать мой компьютер из терминала? Для этого через меню GUI не требуются права суперпользователя.
4 ответа
Обычно ОС запускает при запуске службу, которая запускается от имени пользователя 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] На самом деле служба выполняет другие функции, чтобы обеспечить правильное завершение рабочего стола.
В дополнение к меню 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 такого нет.)
Представьте, что ваш компьютер является общим сервером веб-хостинга, где каждому пользователю предоставляется доступ по SSH. В такой настройке около 500 пользователей на один сервер.
Нужно ли кому-либо действительно перезагружать весь сервер, прерывать загрузку HTTP, прерывать сеансы SSH и т.д.?
Несколько причин из головы:
- варианты командной строки могут быть сценариями, следовательно, вредоносный сценарий может быть внедрен и вызывать очень неприятные вещи (DoS-атака и т. д.).
- Меню с графическим интерфейсом пользователя безопасно: не допускает неприятных событий (например, принудительная перезагрузка - все бросает в воздух)
- Меню графического интерфейса пользователя простое: не путайте пользователей с мощными опциями администратора, такими как подробное ведение журнала, дополнительная отправка сообщений всем зарегистрированным пользователям, отложенное завершение работы, разница между остановкой, режимом обслуживания и т.д.
- Графическое меню простое и означает: не работает "по-разному" в соответствии с уровнями выполнения системы (0, 6 и т.д.), Выполняющими различные сценарии (например, /sbin /shutdown) и / или в соответствии с различными переключателями / параметрами, введенными из команды линия
НТН