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

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

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

Почему FreeBSD требует выполнения исполняемых файлов 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 – большая огромная дыра в безопасности.

  • Могут ли gdb отлаживать корневые программы suid?
  • Как заставить пользователей устанавливать списки управления доступом в каталогах, которыми они не владеют?
  • linux setuid не работает
  • Почему mount.cifs не установлен по умолчанию?
  • Разрешения SUID - что правильно?
  • Использование find -perm для поиска файлов setuid
  • Почему setuid on / sbin / dhclient не работает так, как предполагалось?
  • установите umask (разрешения) аналогично setgid в каталоге
  • Ограничить выполнение программы до списка аргументов
  • Правильно использовать бит setuid
  • Разрешение исполняемого файла Unix и разрешения пользователя во время выполнения
  • Какой был бы лучший способ обойти эту проблему glibc?
  • Interesting Posts

    Что значит быть совместимым с «ш»?

    Как разбить систему Linux?

    Мониторинг трафика X11 / RandR, отправленного с ПК

    Как изменить «изменение даты» нескольких папок, чтобы они были такими же .mkv, что внутри каждого, используя Cygwin

    Как кэшировать блокирующие устройства (для устройства отображения карт)?

    Как расширить вкладки на основе контента?

    Общая спецификация интерфейса командной строки

    Скрыть gitignored файлы дерева

    Как форматировать десятичное число, чтобы отображать прецизионные ноль, но не конечные?

    Пока цикл не будет закрыт

    ddrescue запретительно замедляется из-за тайм-аутов ввода-вывода?

    Как получить sysfs devpath USB-накопителя с учетом соответствующего раздела sysfs path?

    Как извлечь текущую ревизию из каталога репозиториев SVN (subversion) + файлов

    Как импортировать видео / изображения / документы с моего смартфона Samsung в мою систему Linux?

    Что черт переопределяет мой путь в SSH?

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