Как ps подвергает цензуре мой пароль

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

Сразу после операции fork из-за копирования при записи таблицы MMU для обоих процессов имеют одинаковый физический адрес для виртуального адреса 0x1234. Еще раз, это две отдельные таблицы, в которых есть идентичные записи для этого конкретного виртуального адреса.

Дескриптор этой страницы имеет атрибут только для чтения. Если процесс пытается выполнить запись (неважно, A или B), это вызывает сбой процессора из-за нарушения разрешений. Обработчик ошибок страницы ядра запускается, анализирует ситуацию и решает выделить новую физическую страницу, копирует содержимое страницы только для чтения на эту новую страницу, изменяет конфигурацию MMU вызывающего процесса так, что теперь 0x1234 указывает на эту недавно выделенную физическую страницу. страница с атрибутами чтения-записи и перезапускает вызывающий процесс по инструкции, вызвавшей ошибку. На этот раз страница доступна для записи, поэтому инструкция не будет перехвачена.

Обратите внимание, что дескриптор страницы в другом процессе не затрагивается этой операцией.Фактически, это может быть так, потому что ядро ​​выполняет еще одно действие: если страница теперь отображается только в одном процессе, она переключается обратно на чтение-запись, чтобы избежать ее последующего копирования.

См. Также Что происходит после ошибки страницы?

2
02.05.2018, 14:17
1 ответ

psне знает, что это пароль, поэтому не может его «подвергнуть цензуре». С другой стороны, клиент mongoзнает об этом и переписывает свою командную строку, чтобы люди не могли смотреть на нее с помощью ps.

Обратите внимание, что существует короткий (очень короткий )экземпляр между запуском mongoи mongoперезаписью его строки командной строки. В этот короткий момент выводpsбудет включать пароль.

Пароль также хранится в файле истории командной строки вашей оболочки.

3
27.01.2020, 22:02

Теги

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