Отключить и снова включить рандомизацию размещения адресного пространства только для себя

Я хотел бы отключить рандомизацию размещения адресного пространства (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 здесь не имеет жесткого кода архитектуры вашей платформы и делает эту команду переносимой.