Почему владение группы ssh-агента не является корнем

Прежде чем мы обсудим специфические особенности относительно pdflush, kjournald, andkswapd', давайте сначала получим немного фона на контексте того, о чем точно мы говорим с точки зрения Ядра Linux.

Архитектура GNU/Linux

Архитектура GNU/Linux может считаться 2 пробелами:

  • Пользователь
  • Ядро

Между Пространством пользователя и Ядром Пространство находится GNU C Библиотека (glibc). Это обеспечивает интерфейс системного вызова, который подключает ядро к приложениям пространства пользователя.

Пространство Ядра может быть далее подразделено на 3 уровня:

  • Интерфейс системного вызова
  • Архитектурный независимый код ядра
  • Архитектурный зависимый код

Интерфейс Системного вызова как его имя подразумевает, обеспечьте интерфейс между glibc и ядро. Архитектурный Независимый Код Ядра состоит из логических единиц, таких как VFS (Виртуальная файловая система) и VMM (управление виртуальной памятью). Архитектурный Зависимый Код является компонентами, которые являются процессором и определенным для платформы кодом для данной аппаратной архитектуры.

Схема Архитектуры GNU/Linux

                                 ss of gnu/linux arch.

Для остальной части этой статьи мы будем сосредотачивать наше внимание на VFS и логических единицах VMM в Пространстве Ядра.

Подсистемы Ядра GNU/Linux

                                    ss of kernel com

Подсистема VFS

С понятием высокого уровня того, как ядро GNU/Linux структурировано, мы можем копаться немного глубже в подсистеме VFS. Этот компонент ответственен за обеспечение доступа к различным устройствам блочной системы хранения, которые в конечном счете отображаются вниз на файловую систему (ext3/ext4/etc). на физическом устройстве (жесткий диск/и т.д.)..

Схема VFS

ss of vfs

Эта схема показывает как a write() от процесса пользователя пересекает VFS и в конечном счете прокладывает себе путь вниз к драйверу устройства, где он записан в физический носитель. Это - первое место, где мы встречаемся pdflush. Это - демон, который ответственен за сбрасывание грязных данных и буферных блоков метаданных к носителю в фоновом режиме. Схема не показывает это, но существует другой демон, kjournald, который находится вдоль стороны pdflush, выполнение подобной задачи, пишущий грязные блоки журнала в диск.Примечание: Блоки журнала - то, как файловые системы как ext4 и JFS отслеживают изменения в диске в файле до тех изменений, происходящих.

Вышеупомянутые детали обсуждены далее в данной статье.

Обзор write() шаги

Для обеспечения простого обзора ввода-вывода sybsystem операции мы будем использовать пример где функция write() назван приложением Пространства пользователя.

  1. Процесс запрашивает записать файл через write() системный вызов.
  2. Ядро обновляет кэш страницы, отображенный на файле.
  3. pdflush поток ядра заботится о сбрасывании кэша страницы к диску.
  4. Слой файловой системы соединяет каждый буфер блоков к a bio struct (обратитесь к 1.4.3, “Уровень Block” на странице 23), и отправляет запрос записи к слою блочного устройства.
  5. Слой блочного устройства получает запросы от верхних уровней и выполняет эксплуатацию лифта ввода-вывода и помещает запросы в очередь запроса ввода-вывода.
  6. Драйвер устройства, такой как SCSI или другое устройство определенные драйверы будет заботиться об операции записи.
  7. Встроенное микропрограммное обеспечение дискового устройства работает, аппаратным операциям нравится, ищут голову, вращение и передачу данных к сектору на диске.

Подсистема VMM

Продолжая наше более глубокое погружение, мы можем теперь изучить подсистему VMM. Этот компонент ответственен за поддержание непротиворечивости между оперативной памятью (RAM), подкачка, и физическим носителем. Основной механизм для поддержания непротиворечивости bdflush. Поскольку страницы памяти считают грязными, они должны синхронизироваться с данными, это находится на носителе. bdflush скоординирует с pdflush демоны для синхронизации этих данных с носителем.

Схема VMM

                ss of VMM

Подкачка

Когда системная память становится недостаточной, или таймер подкачки ядра истекает, kswapd демон попытается освободить выше на страницы. Пока число свободных страниц остается выше free_pages_high, kswapd ничего не сделает. Однако, если число свободных страниц отбрасывает ниже, то kswapd запустит страницу повторно собирающий моллюсков процесс. После kswapd отметил страницы для перемещения, bdflush будет заботиться для синхронизации любых выдающихся изменений в носителе, через pdflush демоны.

Ссылки и Дополнительные материалы для чтения

5
13.04.2017, 15:13
2 ответа

Если бы он был setgid root, то агент запускался бы как группа root, которая, вероятно, имеет более широкие права, чем пользователь, от имени которого он начинал. Это может быть риском безопасности; по крайней мере, , выполняющий что-то от имени root без необходимости, является красным флагом (даже группа) и требует дополнительного внимания.

Установка права собственности группы на никого , которая является группой, к которой не должны быть прикреплены никакие значимые разрешения или файлы, означает, что ssh-agent не получает больше прав, чем пользователь, запущенный с . Как сказано в связанном вопросе, причина, по которой он setgid, в первую очередь в том, что он предотвращает ptracing программы, а не в том, что она на самом деле нуждается в других разрешениях. В потоке обсуждения , связанном с другим вопросом , один из разработчиков отмечает:

кажется, что группа не имеет права Последствия. Тот факт, что бинарник - это setgid любой группы. Важно.

никто не является удобной группой, которую можно использовать, когда вам нужен только побочный эффект setgid, а не само поведение.

Я думаю, что это все равно будет работать с корнем setgid. Я просто попробовал это здесь, и он совсем не жаловался и, похоже, работал в беглом тестировании. Тем не менее, Я не могу придумать ни одной реальной причины, чтобы изменить его на это - кажется, всем лучше, если он запущен как группа никого, чем группа root.

Я не предлагаю изменять права доступа к файлам, установленным вашим менеджером пакетов, в любом случае, потому что они склонны расстраиваться из-за любых изменений в файлах, которые они контролируют.

.
7
27.01.2020, 20:35

Смысл создания сетгида ssh-agent заключается в повышении безопасности, делая процесс невозможным для отладки, так что даже процесс, запущенный одним и тем же пользователем, не может выгрузить ключи из памяти. На самом деле

ssh-agent не должен иметь дополнительных привилегий. В случае если в ssh-agent имеется уязвимость, если она установлена в какую-либо группу, то это дает пользователю привилегии этой группы. Таким образом, запуск setgid ssh-agent увеличивает риск безопасности... если только группа ssh-agent не запущена как не имеющая на самом деле никаких привилегий - в частности, никаких прав на запись ни на один файл.

Лучший способ запустить setgid программы без воздействия на другие программы - это использовать специальную группу. Это то, что делает Debian, например: ssh-agent выполняется как группа ssh. Fedora использует группу nobody, которая доджирует, но всё равно нормально, так как ни один файл никогда не должен принадлежать группе nobody. Группа root была бы плохой идеей, потому что она владеет большим количеством файлов.

3
27.01.2020, 20:35

Теги

Похожие вопросы