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

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

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

Почему FreeBSD требует выполнения исполняемых файлов setuid или оболочек для терминальных программ? Это, по-видимому, отличный способ внедрить дыры эскалации привилегий.

  • Дарвинский планшет из интерпретатора в исполнении хеш-банга
  • Правильно использовать бит setuid
  • Какой самый безопасный способ для программной записи в файл с правами root?
  • Очистить разрешение setuid с помощью числового режима
  • Как настроить параметры Unix для 360 Spatial Workstation (в частности, аудио-плагины vst и aax), чтобы заставить его работать как не-администратор?
  • Почему setuid on / sbin / dhclient не работает так, как предполагалось?
  • Что означает GID?
  • Изменение паролей root с помощью setuid
  • 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 - лучшая ОС в мире.