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