Почему FreeBSD требует запуска терминальных программ с правами root?

В FreeBSD все графические терминальные программы (например, xterm, rxvt) кажутся установленными setuid root или корневыми оболочками setuid.

В Linux это не относится ни к какому распределению, которое я когда-либо использовал.

  • Изменение размеров разделов на FreeBSD с использованием bsdlabel
  • Могу ли я полагаться на бинарные пакеты (pkg) во FreeBSD
  • Почему не работает setuid с mount?
  • FreeBSD на RPi не видит ключ Wi-Fi TP-Link
  • Как установить LuaJIT на FreeBSD без использования Gmake?
  • Как изменить раздел во FreeBSD 10 с помощью gpart
  • Почему FreeBSD требует выполнения исполняемых файлов setuid или оболочек для терминальных программ? Это, по-видимому, отличный способ внедрить дыры эскалации привилегий.

  • Проблема с часовым поясом MySQL
  • FreeBSD: управление вентилятором на материнской плате tyan с датчиками w83793-i2c
  • Как восстановить случайно удаленный файл базовой системы FreeBSD?
  • Установите диспетчер пакетов во FreeBSD 10
  • Как перенаправить порт по (под) доменному имени?
  • FreeBSD systat не вычисляет скорость загрузки / total на wlan0
  • 3 Solutions collect form web for “Почему FreeBSD требует запуска терминальных программ с правами root?”

    Оригинальная xterm была программой set-uid. Одна из причин, почему нужно, чтобы иметь возможность записывать в файл utmp для записи того, кто использует какое устройство. Еще одна причина заключалась в том, что xterm должен получить право собственности на псевдо-tty-устройство, используемое в качестве стандартного ввода-вывода и ошибки, чтобы установить это право собственности на пользователя, обращающегося к нему.

    В то время как большинство других Unix / Unix, подобных ОС, больше не используют биты setuid или setgid для достижения той же цели, но другие и более безопасные методы, FreeBSD, похоже, сохранила исходное решение.

    Запрет на временный отчет об ошибках / исправление (не найден в списке изменений в порту), FreeBSD не требует, чтобы xterm был setuid и не использовал это с xterm с 2011 года . Комментарий комментатора порта сказал

     - Don't set suid bit. In our implementation, grantpt() and unlockpt() don't actually have any use, because PTY's are created on the fly and already have proper permissions upon creation (see src/lib/libc/stdlib/ptsname.c) [1] 

    Что касается изменений, внесенных в 2008 году :

      The pts(4) driver also implements this feature, which means posix_openpt() will now return PTY's that are created on the fly. 

    Учитывая этот вопрос в 2014 году, звучит так, будто OP смотрит на старую систему. Или (это происходит), система OP, возможно, была изменена кем-то, добавив бит setuid.

    В зависимости от платформы (и ее возраста) xterm будет использовать setuid или setgid для этих операций:

    • открытие псевдотерминала
    • обновление utmp (или utmpx)

    Первоначально BSD (и другие) псевдотерминальные реализации требовали, чтобы приложение находило специальное устройство, а затем открывало его с использованием прав rootuid. Unix98 покончил с первой частью (нахождением специального устройства), начиная с 1999 года . Большинство псевдотерминальных реализаций к 2005 году устранили необходимость установки приложения с помощью setuid . По какой-то причине он игнорировался во FreeBSD.

    Аналогично, приложениям могут потребоваться групповые разрешения (через setgid ) для обновления файла utmp (или utmpx), который используется last и who . xterm предоставил для использования библиотеки utempter для этой цели с 2000 года . Порт FreeBSD для xterm использует эту функцию, поэтому для нее также не требуется setgid.

    Другие программы могут быть установлены как setuid или setgid для одних и тех же операций, но к 2014 году маловероятно, чтобы любая программа терминала нуждалась в разрешениях setuid для пользователя root . Когда они используются в других программах (например, urxvt), они, вероятно, были упущены их сопровождающими.

    Хороший момент, я не заметил, что это все еще так, но, однако. Есть способы ограничить ущерб, который он может сделать, возможно, с этим новым капсиком, над которым они работают. Но для всех приложений X (Xorg) я бы сказал, сначала должен войти Wayland, а затем мы можем поговорить о безопасности на компьютере, на котором работает X для реального. Такие небольшие проблемы, как xterm, способные объявить терминал, которые могут быть решены через пять минут. Xorg – большая огромная дыра в безопасности.

    Linux и Unix - лучшая ОС в мире.