2012-06-28 12 views
16

मैं अपने सिस्टम (उबंटू जीएनयू/लिनक्स 2.6.32-41-सर्वर) पर पता स्थान लेआउट यादृच्छिकरण (एएसएलआर) को अक्षम करना चाहता हूं, लेकिन अगर मैंकेवल मेरे लिए पता स्थान लेआउट यादृच्छिकता को अक्षम और पुन: सक्षम करें

का उपयोग करता हूं
sysctl -w kernel.randomize_va_space=0 

परिवर्तन सिस्टम पर सभी उपयोगकर्ताओं को प्रभावित करेगा, मुझे लगता है। (क्या यह सच है?) मैं केवल उपयोगकर्ता के रूप में एएसएलआर को अक्षम करने के प्रभाव को सीमित कर सकता हूं, या केवल शेल सत्र में जिसमें मैं अक्षम करने के लिए आदेश का आह्वान करता हूं?

Btw, मुझे लगता है कि अपने सिस्टम की मौजूदा (डिफ़ॉल्ट) की स्थापना

sysctl -w kernel.randomize_va_space=0 

है क्यों 2 और नहीं 1 या 3? मुझे/proc/sys सेटिंग्स, उनकी श्रेणियों और उनके अर्थों के संख्यात्मक मानों के बारे में दस्तावेज़ कहां मिल सकता है? धन्यवाद!

+2

http://gcc.gnu.org/wiki/Randomization का कहना है कि 'setarch $ (uname -m) -RL bash' को –

+0

काम करना चाहिए http://unix.stackexchange.com/questions/15881/disable-address -स्पेस-लेआउट-यादृच्छिकरण-एएसएलआर-फॉर-माय-प्रोसेस || http://askubuntu.com/questions/318315/how-can-i- अस्थायी रूप से- अक्षम-aslr-address- स्पेस-layout- यादृच्छिकता –

उत्तर

11

randomize_va_spacesysctl सेटिंग कर्नेल स्रोत पेड़ में Documentation/sysctl/kernel.txt में है। असल में,

0 - प्रक्रिया पता स्थान यादृच्छिकरण बंद करें।

1 - एमएमएपी बेस, स्टैक और वीडीएसओ पृष्ठ के पते को यादृच्छिक बनाएं।

2 - इसके अतिरिक्त ढेर यादृच्छिकता सक्षम करें।

+0

धन्यवाद! यह उपरोक्त मेरे दूसरे ("बीटीडब्लू") प्रश्न को संबोधित करता है, लेकिन मुझे अभी भी एक खाता या खोल सत्र में sysctl के प्रभाव को प्रतिबंधित करने का कोई तरीका नहीं दिख रहा है। मुझे लगता है कि यह असंभव होना चाहिए। : -/ –

+1

हां, सेटिंग वैश्विक है। एक त्वरित grep से पता चलता है कि "व्यक्तित्व" कोड (एकाधिक एबीआई को संभालने) में कुछ (शायद वेस्टिगियल) कोड है जो बातचीत कर सकता है। Task_struct के व्यक्तित्व फ़ील्ड पर ADDR_NO_RANDOMIZE ध्वज सेट करना, वैश्विक स्तर पर सक्षम होने पर भी व्यवहार को अक्षम कर देगा।लेकिन शायद आप इससे अधिक कर्नेल वूडू से निपटना चाहते हैं। –

20

लिनक्स-आधारित सिस्टम पर स्थानीय रूप से एएसएलआर को अक्षम करने का सबसे अच्छा तरीका प्रक्रिया व्यक्तित्व झंडे का उपयोग करना है। आदेश व्यक्तित्व झंडे में हेरफेर करने के

-R साथ setarch है, --addr-no-randomize

वर्चुअल ऐड्रेस स्पेस की यादृच्छिकीकरण अक्षम करता है (ADDR_NO_RANDOMIZE पर बदल जाता है)।

यहाँ आगे बढ़ने के लिए कैसे:

$> setarch $(uname -m) -R /bin/bash 

यह आदेश एक खोल ASLR जिसमें निष्क्रिय कर दिया गया चलाता है। इस प्रक्रिया के सभी वंशज पिता के व्यक्तित्व झंडे के उत्तराधिकारी होंगे और इस प्रकार एक विकलांग एएसएलआर होगा। झंडे की विरासत को तोड़ने का एकमात्र तरीका एक सेट्यूड प्रोग्राम को कॉल करना होगा (यह ऐसी सुविधा का समर्थन करने के लिए एक सुरक्षा उल्लंघन होगा)।

ध्यान दें कि uname -m आपके प्लेटफ़ॉर्म के आर्किटेक्चर को हार्ड-कोड न करने और इस आदेश को पोर्टेबल बनाने के लिए यहां है।

संबंधित मुद्दे