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-*. conf 이상을 사용하거나 /etc/sysctl.conf를 직접 사용 하여이 디렉토리의 모든 항목을 재정의 할 수 있습니다 .

두 위치 중 하나에서 구성을 편집 한 후 변경 사항을 적용 할 수 있습니다.

sudo sysctl -p

이것은 구성 sysctl -e을 편집하고 sysctl -f실행하는 것이 아닙니까?
— Nils


맞습니다-이상하게도 두 옵션이 모두 작동합니다.
— Nils

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 및 "default"에 대해 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

물론 이런 식으로 물건을 망칠 수는 없습니다. 그리고 아래의 의견을 읽으십시오.


이 방법으로 수십 줄의 선호하는 구성을 일반 텍스트 파일로 유지하고 필요할 때 재사용 할 수 있기 때문에 구성 파일을 고수하고 싶습니다. 이 목적으로 스크립트를 작성하면 불필요한 합병증처럼 느껴집니다. 그러나 현재 값을 확인하는 방법에 대한 정보 덕분입니다.
— Desmond Hume

구성 파일을 사용하는 것이 훨씬 좋습니다. 스크립트를 작성하라고 제안하는 것이 아니라 "읽기 전용"값이 아니며 수동으로 조정할 수 있음을 보여줍니다. ;)
— goldilocks

1
이 쉘 스크립트는 다시 작성하는 다소 흥미로운 방법입니다 sysctl -a.
— derobert

사실이지만 (파일 브라우저의 특성에 따라) proc / sys를 숙독하는 것이 더 편리한 것으로 간주 될 수 있습니다. WRT는 프로그래밍 방식으로 정보를 얻는 데 WRT가 파이프 된 "system (sysctl)"유형보다 더 효율적이며 언어, 사용 가능한 라이브러리 등과 상관없이 작동합니다.
— goldilocks

1
프로그래밍 방식으로 의미하는 바를 잘못 이해 했을 것입니다. 어쩌면 분명히해야합니다. 쉘 스크립트를 의미하지 않았습니다. 이의 네이티브 C에 해당합니다 sysctl(참조 man 2 sysctl) 그러나,이 대부분의 다른 언어 (이 일부에있다)에 포팅되지는 이러한 경우에 가장 좋은 옵션은 읽기 또는 PROC 쓰기하는 것입니다. echoC 및 다른 언어로 제공되는 고급 스트림 I / O 기능이 가능하다고 말할 수 있듯이 bash 가 실패 할 수 있습니다. 그러나 저수준 읽기 / 쓰기는 수행되지 않습니다. 어쨌든, 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.