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.