Отключить и снова включить рандомизацию адресного пространства только для себя
Я хотел бы отключить рандомизацию размещения адресного пространства (ASLR) в моей системе (Ubuntu Gnu/Linux 2.6.32-41-сервер), но, если я использую
sysctl -w kernel.randomize_va_space=0
Я полагаю, что это изменение затронет всех пользователей системы. (Это правда?) Как я могу ограничить эффекты отключения ASLR для себя как пользователя или только для сеанса оболочки, в котором я вызываю команду для отключения?
Кстати, я вижу, что текущая (по умолчанию) настройка моей системы
sysctl -w kernel.randomize_va_space=0
Почему 2, а не 1 или 3? Где я могу найти документацию о числовых значениях параметров /proc/sys, их диапазонах и их значениях? Спасибо!
2 ответа
Документация для randomize_va_space
настройка sysctl находится в Documentation/sysctl/kernel.txt
в исходном дереве ядра. В принципе,
0 - отключить рандомизацию адресного пространства процесса.
1 - Сделать адреса базы mmap, стека и страницы VDSO рандомизированными.
2 - дополнительно включить рандомизацию кучи.
Лучший способ локально отключить ASLR в системе на основе Linux- использовать флаги индивидуальности процессов. Команда для манипуляции флагами личности setarch
с
-R
,--addr-no-randomize
Отключает рандомизацию виртуального адресного пространства (включает ADDR_NO_RANDOMIZE).
Вот как это сделать:
$> setarch $(uname -m) -R /bin/bash
Эта команда запускает оболочку, в которой ASLR был отключен. Все потомки этого процесса наследуют флаги личности отца и, следовательно, имеют отключенную ASLR. Единственный способ нарушить наследование флагов - вызвать программу setuid (поддержка такой функции была бы нарушением безопасности).
Обратите внимание, что uname -m
здесь, чтобы не жестко программировать архитектуру вашей платформы и сделать эту команду переносимой.