Sysctl.conf और sysctl.d से संबंधित कर्नेल विकल्पों के मूल्यों का पता लगाना


20

मेरे उबंटू मशीन पर, /etc/sysctl.confफ़ाइल में, मुझे इस तरह से डिफ़ॉल्ट रूप से टिप्पणी करने वाले रिवर्स पाथ फ़िल्टरिंग विकल्प मिले हैं:

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

लेकिन /etc/sysctl.d/10-network-security.confवे (फिर से, डिफ़ॉल्ट रूप से) बाहर टिप्पणी नहीं की है:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

तो रिवर्स पाथ फ़िल्टरिंग सक्षम है या नहीं? कौन से कॉन्फ़िगरेशन स्थान प्राथमिकता लेते हैं? मैं इन और अन्य कर्नेल विकल्पों के वर्तमान मूल्यों की जांच कैसे करूं?

जवाबों:


32

Sysctl वैरिएबल की वैल्यू चेक करना उतना ही आसान है

sysctl <variable name>

और, वैसे, एक sysctl चर सेट करना उतना ही सरल है जितना कि

sudo sysctl -w <variable name>=<value>

लेकिन इस तरह से किए गए बदलाव शायद अगले रिबूट तक ही रहेंगे।

कॉन्फ़िगर स्थानों में से कौन सा, /etc/sysctl.confया /etc/sysctl.d/, पूर्वता लेता है, यहाँ /etc/sysctl.d/READMEफ़ाइल क्या कहती है:

अंतिम-उपयोगकर्ता 60 - * का उपयोग कर सकते हैं। ऊपर और ऊपर, या सीधे /etc/sysctl.conf का उपयोग करें , जो इस निर्देशिका में कुछ भी अधिलेखित करता है

दोनों स्थानों में से किसी एक में विन्यास को संपादित करने के बाद, परिवर्तनों को लागू किया जा सकता है

sudo sysctl -p

यह नहीं है sysctl -eसंपादन के लिए और sysctl -fconfig क्रियान्वित करने के लिए?
निल्स


सही - अजीब दोनों विकल्प काम करते हैं।
निल्स

2

इस तरह का सामान आम तौर पर /procऔर / या /sysकर्नेल इंटरफेस में होता है (पहले, ध्यान रखें कि उन निर्देशिकाओं में कुछ भी नियमित डिस्क फ़ाइल नहीं है, वे सभी कर्नेल के लिए सीधी रेखाएं हैं)।

इसलिए, जैसे:

»for x in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -ne "$x "`cat $x`"\n"; done
/proc/sys/net/ipv4/conf/all/rp_filter 0
/proc/sys/net/ipv4/conf/default/rp_filter 1
/proc/sys/net/ipv4/conf/em1/rp_filter 1
/proc/sys/net/ipv4/conf/lo/rp_filter 0
/proc/sys/net/ipv4/conf/wlan0/rp_filter 1

ऐसा लगता है कि मेरे पास em1, wlan0 और "डिफ़ॉल्ट" के लिए rp_filter सेट है। आप फ़ाइल हैंडल पर लिखकर उन्हें सेट या अनसेट कर सकते हैं:

»cd /proc/sys/net/ipv4/conf/lo
»echo 1 > rp_filter
»cat rp_filter
1
»echo 0 > rp_filter
»cat rp_filter
0

जैसा कि उल्लेख किया गया है, यह कर्नेल के साथ सीधा संचार है, इसलिए यह तुरंत प्रभावी होता है। ये कॉन्फ़िगरेशन फ़ाइल नहीं हैं । यदि आप कोशिश करते हैं और कुछ गलत करते हैं:

»echo whatever > rp_filter
bash: echo: write error: Invalid argument

यह कहने के लिए नहीं है कि आप इस तरह से चीजों को पेंच नहीं कर सकते हैं, बिल्कुल। और नीचे दिए गए टिप्पणियों को पढ़ना सुनिश्चित करें।


मैं नहीं बल्कि कॉन्फ़िगरेशन फ़ाइलों से चिपके रहना चाहिए क्योंकि इस तरह से मैं अपने पसंदीदा कॉन्फ़िगरेशन की दर्जनों पंक्तियों को एक सादे पाठ फ़ाइल में रख सकता हूं और आवश्यकता होने पर उनमें से कुछ का पुन: उपयोग कर सकता हूं। इस उद्देश्य के लिए एक स्क्रिप्ट लिखना एक अनावश्यक जटिलता की तरह लगता है। लेकिन वर्तमान मूल्यों की जांच करने के लिए एक विधि पर जानकारी के लिए धन्यवाद।
डेसमंड ह्यूम

निश्चित रूप से कॉन्फिग फाइलों का उपयोग करना ज्यादा बेहतर है। मैं आपको एक स्क्रिप्ट लिखने का सुझाव नहीं दे रहा था, बस यह दिखाते हुए कि वे "केवल पढ़ने के लिए" मूल्य नहीं हैं और इसका उपयोग मैनुअल ट्विक्स बनाने के लिए किया जा सकता है। ;)
गोल्डिलक्स

1
यही कारण है कि खोल स्क्रिप्ट पुनर्लेखन करने के लिए एक नहीं बल्कि दिलचस्प तरीका है sysctl -a...
derobert

सच, लेकिन (आपकी फ़ाइल ब्राउज़र की प्रकृति के आधार पर) perusing proc / sys को अधिक सुविधाजनक माना जा सकता है, जो एक कारण है जिसके बारे में जानने लायक है। एक और यह है कि WRT को सूचनात्मक रूप से जानकारी प्राप्त करने के लिए, वह इंटरफ़ेस पाइप्ड "सिस्टम (sysctl)" प्रकार के सामान की तुलना में अधिक कुशल है, और भाषा, उपलब्ध
लिबास

1
आप गलत समझ रहे हैं कि मुझे प्रोग्राम से क्या मतलब है , शायद मुझे स्पष्ट करने की आवश्यकता है: मेरा मतलब शेल स्क्रिप्ट नहीं था। एक देशी सी के बराबर sysctl(देखें man 2 sysctl) है, हालांकि, यह अधिकांश अन्य भाषाओं (यह कुछ में है) के लिए पोर्ट नहीं किया गया है, और इन मामलों में सबसे अच्छा विकल्प पढ़ने या लिखने के लिए है। यह अच्छी तरह से हो सकता है कि बैश की echoअसफलता हो सकती है, जैसा कि मैं कह सकता हूं कि सी और अन्य भाषाओं में उपलब्ध उच्च स्तरीय धारा I / O फ़ंक्शन कर सकते हैं। हालांकि, निम्न स्तर का पठन / लेखन नहीं होगा। किसी भी मामले में, खरीद इंटरफ़ेस के बारे में जानना महत्वपूर्ण है, यही वजह है कि मैं इसे लाया ...
गोल्डीलॉक्स

0

स्वीकार किए गए उत्तर को पूरा करने के लिए , जबकि यह सच है कि /etc/sysctl.confसेटिंग्स लोगों पर पूर्वता लेती हैं /etc/sysctl.d/, मूल प्रश्न में सामने आया उदाहरण दो चरों में टिप्पणी करता है /etc/sysctl.conf:

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

और एक ही चर में बाहर टिप्पणी नहीं की /etc/sysctl.d/10-network-security.conf:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

यह भ्रामक हो सकता है क्योंकि एक टिप्पणी एक सेटिंग नहीं है, लेकिन केवल एक टिप्पणी जो सेटिंग हो सकती है।

इस स्थिति में, चर वास्तव में दोनों 1 पर सेट होते हैं, इस तथ्य के बावजूद कि मजबूत कॉन्फ़िगरेशन फ़ाइल में वे टिप्पणी करते हैं।

यदि /etc/sysctl.confहमारे पास था:

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

तब चरों को अंततः 0 पर सेट किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.