«Очистка среды» - это удаление различных «опасных» переменных среды, которые могут использоваться для влияния на поведение двоичного файла - например, LD_PRELOAD
может использоваться, чтобы заставить динамический компоновщик вытягивать код, который может существеннопроизвольные изменения в работе программы;некоторые переменные могут быть настроены на вывод трассировки в файлы с хорошо известными именами;и т. д.
Эта очистка обычно выполняется для двоичных файлов setuid / setgid в качестве меры безопасности, но ядро обеспечивает ловушку, позволяющую модулям безопасности включать ее для других произвольных двоичных файлов.Код загрузчика ELF ядра использует этот хук для установки записи AT_SECURE
во «вспомогательном векторе» информации, которая передается в двоичный файл.(См. здесь и здесь для реализации этой ловушки в коде AppArmor.)
Когда выполнение начинается в пользовательском пространстве, динамический компоновщик подхватывает этозначение и использует его для установки флага __libc_enable_secure
;вы увидите, что та же самая подпрограмма также содержит код, который устанавливает этот флаг для двоичных файлов setuid / setgid.(В другом месте есть эквивалентный код для двоичных файлов, которые статически связаны.)
__libc_enable_secure
влияет на количество мест в основной части основного кода динамического компоновщика ,и вызывает удаление списка определенных переменных среды .