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