การค้นหาค่าของตัวเลือกเคอร์เนลที่เกี่ยวข้องกับ sysctl.conf และ sysctl.d


20

ในเครื่อง Ubuntu ของฉันใน/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>

แต่การเปลี่ยนแปลงที่ทำในลักษณะนี้จะมีผลจนกว่าจะรีบูตครั้งต่อไปเท่านั้น

ตำแหน่งใดของไฟล์ config /etc/sysctl.confหรือ/etc/sysctl.d/มีความสำคัญกว่านี่คือสิ่งที่/etc/sysctl.d/READMEไฟล์บอกว่า:

ผู้ใช้ปลายทางสามารถใช้ 60 - *. conf และสูงกว่าหรือใช้/etc/sysctl.conf โดยตรงซึ่งจะแทนที่สิ่งใด ๆ ในไดเรกทอรีนี้

หลังจากแก้ไขการกำหนดค่าในตำแหน่งใด ๆ ในสองแห่งนี้การเปลี่ยนแปลงสามารถนำไปใช้ได้

sudo sysctl -p

นี่ไม่ใช่sysctl -eสำหรับการแก้ไขและsysctl -fสำหรับการดำเนินการกำหนดค่าหรือไม่
นิลส์


ขวา - ตัวเลือกทั้งสองแปลกทำงาน
นิลส์

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

ดูเหมือนว่าฉันได้ตั้งค่า rp_filter สำหรับ em1, wlan0 และ "default" คุณสามารถตั้งค่าหรือยกเลิกการตั้งค่าได้โดยเพียงแค่เขียนไปที่ตัวจัดการไฟล์:

»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

ซึ่งไม่ได้บอกว่าคุณไม่สามารถทำเรื่องแบบนี้ได้แน่นอน และให้แน่ใจว่าได้อ่านความคิดเห็นด้านล่าง


ฉันควรติดไฟล์การกำหนดค่าเพราะวิธีนี้ฉันสามารถเก็บการกำหนดค่าที่ฉันต้องการได้หลายสิบบรรทัดในไฟล์ข้อความธรรมดาและนำกลับมาใช้ใหม่ (บางส่วน) เมื่อจำเป็น การเขียนสคริปต์เพื่อจุดประสงค์นี้ให้ความรู้สึกเหมือนเป็นเรื่องยุ่งยากที่ไม่จำเป็น แต่ขอขอบคุณสำหรับข้อมูลเกี่ยวกับวิธีการตรวจสอบค่าปัจจุบัน
Desmond Hume

แน่นอนว่าการใช้ไฟล์กำหนดค่าจะดีกว่ามาก ฉันไม่ได้แนะนำให้คุณเขียนสคริปต์เพียงแค่แสดงให้เห็นว่าสิ่งเหล่านั้นไม่ใช่ค่า "อ่านอย่างเดียว" และสามารถใช้ในการปรับแต่งด้วยตนเอง ;)
goldilocks

1
เชลล์สคริปต์ที่เป็นวิธีที่น่าสนใจมากกว่าที่จะเขียนใหม่sysctl -a...
derobert

จริง แต่ (ขึ้นอยู่กับลักษณะของไฟล์เบราว์เซอร์ของคุณ) การอ่าน proc / sys อาจถือว่าสะดวกกว่าซึ่งเป็นเหตุผลหนึ่งที่ควรค่าแก่การรู้ อีกประการหนึ่งคือ WRT เพื่อรับข้อมูลโดยทางโปรแกรมส่วนต่อประสานนั้นมีประสิทธิภาพมากกว่าการพิมพ์แบบ "system (sysctl)" และทำงานได้โดยไม่ต้องคำนึงถึงภาษา libs ที่มีอยู่ ฯลฯ
goldilocks

1
คุณเข้าใจผิดในสิ่งที่ฉันหมายถึงโดยทางโปรแกรมบางทีฉันต้องอธิบาย: ฉันไม่ได้หมายถึงเชลล์สคริปต์ มีค่า C ดั้งเดิมเทียบเท่าsysctl(ดูman 2 sysctl) อย่างไรก็ตามนี่ไม่ได้ถูกย้ายไปยังภาษาอื่น ๆ ส่วนใหญ่ (เป็นบางส่วน) และในกรณีเหล่านี้ตัวเลือกที่ดีที่สุดคือการอ่านหรือเขียนไปยัง proc มันอาจเป็นไปได้ว่า bash นั้นechoอาจล้มเหลวเนื่องจากฉันสามารถพูดได้ว่าฟังก์ชั่น I / O ระดับสูงที่มีใน C และภาษาอื่น ๆ สามารถทำได้ การอ่าน / เขียนระดับต่ำจะไม่อย่างไรก็ตาม ไม่ว่าในกรณีใดการรู้เกี่ยวกับอินเทอร์เฟซ proc เป็นสิ่งสำคัญซึ่งเป็นสาเหตุที่ฉันนำมันขึ้นมา ...
goldilocks

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 ในที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.