Прежде чем мы обсудим специфические особенности относительно pdflush
, kjournald, and
kswapd', давайте сначала получим немного фона на контексте того, о чем точно мы говорим с точки зрения Ядра Linux.
Архитектура GNU/Linux может считаться 2 пробелами:
Между Пространством пользователя и Ядром Пространство находится GNU C Библиотека (glibc
). Это обеспечивает интерфейс системного вызова, который подключает ядро к приложениям пространства пользователя.
Пространство Ядра может быть далее подразделено на 3 уровня:
Интерфейс Системного вызова как его имя подразумевает, обеспечьте интерфейс между glibc
и ядро. Архитектурный Независимый Код Ядра состоит из логических единиц, таких как VFS (Виртуальная файловая система) и VMM (управление виртуальной памятью). Архитектурный Зависимый Код является компонентами, которые являются процессором и определенным для платформы кодом для данной аппаратной архитектуры.
Для остальной части этой статьи мы будем сосредотачивать наше внимание на VFS и логических единицах VMM в Пространстве Ядра.
С понятием высокого уровня того, как ядро GNU/Linux структурировано, мы можем копаться немного глубже в подсистеме VFS. Этот компонент ответственен за обеспечение доступа к различным устройствам блочной системы хранения, которые в конечном счете отображаются вниз на файловую систему (ext3/ext4/etc). на физическом устройстве (жесткий диск/и т.д.)..
Эта схема показывает как a write()
от процесса пользователя пересекает VFS и в конечном счете прокладывает себе путь вниз к драйверу устройства, где он записан в физический носитель. Это - первое место, где мы встречаемся pdflush
. Это - демон, который ответственен за сбрасывание грязных данных и буферных блоков метаданных к носителю в фоновом режиме. Схема не показывает это, но существует другой демон, kjournald
, который находится вдоль стороны pdflush
, выполнение подобной задачи, пишущий грязные блоки журнала в диск.Примечание: Блоки журнала - то, как файловые системы как ext4 и JFS отслеживают изменения в диске в файле до тех изменений, происходящих.
Вышеупомянутые детали обсуждены далее в данной статье.
write()
шагиДля обеспечения простого обзора ввода-вывода sybsystem операции мы будем использовать пример где функция write()
назван приложением Пространства пользователя.
write()
системный вызов.bio struct
(обратитесь к 1.4.3, “Уровень Block” на странице 23), и отправляет запрос записи к слою блочного устройства.Продолжая наше более глубокое погружение, мы можем теперь изучить подсистему VMM. Этот компонент ответственен за поддержание непротиворечивости между оперативной памятью (RAM), подкачка, и физическим носителем. Основной механизм для поддержания непротиворечивости bdflush
. Поскольку страницы памяти считают грязными, они должны синхронизироваться с данными, это находится на носителе. bdflush
скоординирует с pdflush
демоны для синхронизации этих данных с носителем.
Когда системная память становится недостаточной, или таймер подкачки ядра истекает, kswapd
демон попытается освободить выше на страницы. Пока число свободных страниц остается выше free_pages_high
, kswapd
ничего не сделает. Однако, если число свободных страниц отбрасывает ниже, то kswapd
запустит страницу повторно собирающий моллюсков процесс. После kswapd
отметил страницы для перемещения, bdflush
будет заботиться для синхронизации любых выдающихся изменений в носителе, через pdflush
демоны.
Если бы он был setgid root, то агент запускался бы как группа root
, которая, вероятно, имеет более широкие права, чем пользователь, от имени которого он начинал. Это может быть риском безопасности; по крайней мере, , выполняющий что-то от имени root без необходимости, является красным флагом (даже группа) и требует дополнительного внимания.
Установка права собственности группы на никого
, которая является группой, к которой не должны быть прикреплены никакие значимые разрешения или файлы, означает, что ssh-agent
не получает больше прав, чем пользователь, запущенный с . Как сказано в связанном вопросе, причина, по которой он setgid, в первую очередь в том, что он предотвращает ptracing программы, а не в том, что она на самом деле нуждается в других разрешениях. В потоке обсуждения , связанном с другим вопросом , один из разработчиков отмечает:
кажется, что группа не имеет права Последствия. Тот факт, что бинарник - это setgid любой группы. Важно.
никто
не является удобной группой, которую можно использовать, когда вам нужен только побочный эффект setgid, а не само поведение.
Я думаю, что это все равно будет работать с корнем setgid. Я просто попробовал это здесь, и он совсем не жаловался и, похоже, работал в беглом тестировании. Тем не менее, Я не могу придумать ни одной реальной причины, чтобы изменить его на это - кажется, всем лучше, если он запущен как группа никого
, чем группа root
.
Я не предлагаю изменять права доступа к файлам, установленным вашим менеджером пакетов, в любом случае, потому что они склонны расстраиваться из-за любых изменений в файлах, которые они контролируют.
. Смысл создания сетгида ssh-agent
заключается в повышении безопасности, делая процесс невозможным для отладки, так что даже процесс, запущенный одним и тем же пользователем, не может выгрузить ключи из памяти. На самом деле
ssh-agent
не должен иметь дополнительных привилегий. В случае если в ssh-agent
имеется уязвимость, если она установлена в какую-либо группу, то это дает пользователю привилегии этой группы. Таким образом, запуск setgid ssh-agent
увеличивает риск безопасности... если только группа ssh-agent
не запущена как не имеющая на самом деле никаких привилегий - в частности, никаких прав на запись ни на один файл.
Лучший способ запустить setgid программы без воздействия на другие программы - это использовать специальную группу. Это то, что делает Debian, например: ssh-agent
выполняется как группа ssh
. Fedora использует группу nobody
, которая доджирует, но всё равно нормально, так как ни один файл никогда не должен принадлежать группе nobody
. Группа root
была бы плохой идеей, потому что она владеет большим количеством файлов.