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

Я хотел бы отключить рандомизацию макета адресного пространства (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, их диапазонах и их значениях? Спасибо!

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