Tìm ra các giá trị của các tùy chọn kernel liên quan đến sysctl.conf và sysctl.d


20

Trên máy Ubuntu của tôi, trong /etc/sysctl.conftệp, tôi có các tùy chọn lọc đường dẫn ngược được nhận xét theo mặc định như thế này:

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

nhưng trong /etc/sysctl.d/10-network-security.confđó họ (một lần nữa, theo mặc định) không nhận xét:

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

Vì vậy, lọc đường dẫn ngược được kích hoạt hay không? Những vị trí cấu hình nào được ưu tiên? Làm cách nào để kiểm tra các giá trị hiện tại của các tùy chọn này và các tùy chọn kernel khác?

Câu trả lời:


32

Kiểm tra giá trị của biến sysctl dễ như

sysctl <variable name>

và, nhân tiện, việc đặt biến sysctl cũng đơn giản như

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

nhưng những thay đổi được thực hiện theo cách này có thể sẽ chỉ giữ lại cho đến lần khởi động lại tiếp theo.

Đối với vị trí cấu hình nào, /etc/sysctl.confhoặc /etc/sysctl.d/, được ưu tiên, đây là /etc/sysctl.d/READMEtệp nói:

Người dùng cuối có thể sử dụng 60 - *. Conf trở lên hoặc sử dụng /etc/sysctl.conf trực tiếp, ghi đè mọi thứ trong thư mục này .

Sau khi chỉnh sửa cấu hình ở bất kỳ hai vị trí nào, các thay đổi có thể được áp dụng với

sudo sysctl -p

Đây không phải là sysctl -eđể chỉnh sửa và sysctl -fthực hiện cấu hình?
Nils


Phải - kỳ lạ là cả hai lựa chọn đều hoạt động.
Nils

2

Loại công cụ này thường có trong /procvà / hoặc /sysgiao diện kernel (đầu tiên, hãy nhớ rằng không có gì trong các thư mục đó là một tệp đĩa thông thường, tất cả chúng đều là các đường trực tiếp đến kernel).

Vì vậy, ví dụ:

»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

Có vẻ như tôi đã đặt rp_filter cho em1, wlan0 và "default". Bạn có thể đặt hoặc hủy đặt chúng bằng cách chỉ cần ghi vào tệp xử lý:

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

Như đã đề cập, đây là giao tiếp trực tiếp với kernel, do đó sẽ có hiệu lực ngay lập tức. Đây không phải là tập tin cấu hình. Nếu bạn cố gắng và làm điều gì đó sai:

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

Điều đó không có nghĩa là bạn không thể làm hỏng mọi thứ theo cách này, tất nhiên. Và hãy chắc chắn đọc các ý kiến ​​dưới đây.


Tôi thà dính vào các tệp cấu hình bởi vì cách này tôi có thể giữ hàng tá dòng cấu hình ưa thích của mình trong một tệp văn bản thuần túy và sử dụng lại (một số) chúng khi cần. Viết một kịch bản cho mục đích này cảm thấy như một sự phức tạp không cần thiết. Nhưng cảm ơn về thông tin về một phương pháp để kiểm tra các giá trị hiện tại.
Desmond Hume

Chắc chắn sử dụng tập tin cấu hình là tốt hơn nhiều. Tôi không đề nghị bạn viết một tập lệnh, chỉ minh họa rằng những giá trị đó không phải là "chỉ đọc" và có thể được sử dụng để thực hiện các chỉnh sửa thủ công. ;)
goldilocks

1
Kịch bản shell đó là một cách khá thú vị để viết lại sysctl -a...
derobert

Đúng, nhưng (tùy thuộc vào bản chất của trình duyệt tệp của bạn), việc truy cập Proc / sys có thể được coi là thuận tiện hơn, đó là một lý do đáng để biết. Một điều nữa là WRT để lấy thông tin theo chương trình, giao diện đó hiệu quả hơn các công cụ loại "hệ thống (sysctl)" và hoạt động bất kể ngôn ngữ, libs có sẵn, v.v.
goldilocks

1
Bạn hiểu sai ý của tôi bằng lập trình , có lẽ tôi cần làm rõ: tôi không có ý nói kịch bản shell. Có một ngôn ngữ C tương đương với sysctl(xem man 2 sysctl), tuy nhiên, điều này không được chuyển sang hầu hết các ngôn ngữ khác (trong một số ngôn ngữ), và trong những trường hợp này, lựa chọn tốt nhất là đọc hoặc ghi vào Proc. Cũng có thể là bash echocó thể thất bại, vì tôi có thể nói rằng các hàm I / O luồng cấp cao có sẵn trong C và các ngôn ngữ khác có thể. Tuy nhiên, mức độ đọc / ghi thấp sẽ không. Trong mọi trường hợp, việc biết về giao diện Proc rất quan trọng, đó là lý do tại sao tôi đưa nó lên ...
goldilocks

0

Để hoàn thành câu trả lời được chấp nhận , trong khi sự thật là /etc/sysctl.confcác cài đặt được ưu tiên hơn các /etc/sysctl.d/câu hỏi trong , ví dụ được đưa ra trong câu hỏi ban đầu cho thấy hai biến được nhận xét trong /etc/sysctl.conf:

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

và các biến tương tự không được nhận xét trong /etc/sysctl.d/10-network-security.conf:

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

Điều này có thể gây hiểu nhầm bởi vì một nhận xét không phải là một thiết lập, mà chỉ là một nhận xét về những gì có thể là một thiết lập.

Trong tình huống này, các biến thực sự được đặt thành 1, mặc dù thực tế là trong tệp cấu hình mạnh hơn, chúng được nhận xét.

Nếu trong /etc/sysctl.confchúng tôi đã có:

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

sau đó các biến cuối cùng sẽ được đặt thành 0.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.