3장. 외부 커널 매개 변수로의 중요한 변경
이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 8.1과 함께 제공되는 커널의 중요한 변경 사항을 요약해서 설명합니다. 이러한 변경 사항에는 proc
항목, sysctl
및 sysfs
기본값, 부팅 매개 변수, 커널 구성 옵션 또는 눈에 보이는 동작 변경이 포함됩니다.
새 커널 매개변수
- perf_v4_pmi = [X86,INTEL]
이 매개 변수는 Intel PMU 카운터 정지 기능을 비활성화합니다.
이 기능은 Arch Perfmon v4(Skylake 이상)부터 시작됩니다.
형식: <bool>
- hv_nopvspin [X86,HYPER_V]
- 이 매개변수는 반가상 스핀락 최적화를 비활성화하여 하이퍼바이저가 잠금 경합 시 게스트를 'idle'할 수 있도록 합니다.
- ipcmni_extend [KNL]
- 이 매개 변수는 고유한 System V IPC 식별자의 최대 수를 32,768에서 16,777,216으로 확장합니다.
- kpti = [ARM64]
이 매개 변수는 사용자 및 커널 주소 공간의 페이지 테이블 격리를 제어합니다.
옵션은 다음과 같습니다.
-
default
: 완화가 필요한 코어에서 활성화됩니다. -
0
: 강제 비활성화 -
1
: 강제로 활성화
-
- mds = [X86,INTEL]
이 매개변수는 MDS(Micro-architectural Data Sampling) 취약점에 대한 완화 기능을 제어합니다.
특정 CPU는 특정 조건에서 공개 가젯으로 정보를 전달할 수 있는 CPU 내부 버퍼에 대한 위협에 취약합니다. 취약한 프로세서에서 예측 가능한 전달된 데이터를 캐시 사이드 채널 공격에 사용하여 공격자가 직접 액세스할 수 없는 데이터에 액세스할 수 있습니다.
옵션은 다음과 같습니다.
-
full
- 취약한 CPU에서 MDS 완화를 활성화합니다. -
full, nosmt
- MDS 완화를 활성화하고 취약한 CPU에서 SMT(Simultaneous Multi Threading)를 비활성화합니다. off
- MDS 완화를 무조건 비활성화합니다.이 매개 변수를 지정하지 않는 것은
mds=full
과 동일합니다.자세한 내용은 업스트림 커널 설명서를 참조하십시오.
-
- 완화 = [X86,PPC, S390,ARM64]
이 매개변수는 CPU 취약점에 대한 선택적 완화 조치를 제어합니다. 이는 각각 기존 아카이브별 옵션의 집계인 선별된 아치 독립적인 옵션 집합입니다.
옵션은 다음과 같습니다.
off
- 모든 선택적 CPU 완화를 비활성화합니다. 이로 인해 시스템 성능이 향상되지만 여러 CPU 취약점에 사용자가 노출될 수도 있습니다.다음과 같습니다.
-
nopti [X86,PPC]
-
kpti=0 [ARM64]
-
nospectre_v1 [X86,PPC]
-
nobp=0 [S390]
-
nospectre_v2 [X86,PPC,S390,ARM64]
-
spectre_v2_user=off [X86]
-
spec_store_bypass_disable=off [X86,PPC]
-
ssbd=force-off [ARM64]
-
l1tf=off [X86]
-
mds=off [X86]
-
auto
(기본값) - 모든 CPU 취약점을 완화하지만 보안 취약점이 취약하더라도 SMT(Simultaneous Multi Threading)를 사용하도록 둡니다. 이 옵션은 SMT가 커널 업그레이드에서 비활성화되거나 SMT 기반 공격을 방지할 수 있는 다른 방법을 가지고 있기 때문에 놀랄 필요가 없는 사용자를 위한 것입니다.다음과 같습니다.
- (기본 동작)
auto,nosmt
- 모든 CPU 취약점을 완화하여 필요한 경우 SMT(동시 멀티 스레드)를 비활성화합니다. 이 옵션은 SMT를 손실하는 것을 의미하더라도 항상 완전히 완화하려는 사용자를 위한 것입니다.다음과 같습니다.
-
l1tf=flush,nosmt [X86]
-
mds=full,nosmt [X86]
-
- novmcoredd [KNL,KDUMP]
이 매개 변수는 장치 덤프를 비활성화합니다.
장치 덤프를 사용하면 드라이버가 vmcore에 덤프 데이터를 추가할 수 있으므로 드라이버가 지정된 디버그 정보를 수집할 수 있습니다. 드라이버는 제한 없이 데이터를 추가할 수 있으며 이 데이터는 메모리에 저장되므로 메모리에 상당한 메모리 부하가 발생할 수 있습니다.
장치 덤프를 비활성화하면 메모리를 절약하는 데 도움이 될 수 있지만 드라이버 디버그 데이터를 더 이상 사용할 수 없습니다.
이 매개변수는
CONFIG_PROC_VMCORE_DEVICE_DUMP
커널 구성이 설정된 경우에만 사용할 수 있습니다.- nospectre_v1 [X86]
이 매개변수는 Spectre Variant 1의 완화 기능을 비활성화합니다(바운드 확인 바이패스).
이 옵션을 사용하면 시스템에서 데이터 유출이 가능합니다.
- psi = [KNL]
이 매개 변수는 누수 정보 추적을 활성화하거나 비활성화합니다.
형식: <bool>
- random.trust_cpu={on,off} [KNL]
-
이 매개변수는 CPU의 임의 번호 생성기(사용 가능한 경우) 사용을 신뢰하여 커널의 CRNG(Cryptdom Random Number Generation)을 완전히 시드할 수 있도록 활성화하거나 비활성화합니다. 기본값은
CONFIG_RANDOM_TRUST_CPU 커널 구성에서
제어합니다. - vm_debug[=options] [KNL]
CONFIG_DEBUG_VM=y
와 함께 사용할 수 있습니다.이 매개 변수를 활성화하면 특히 메모리 양이 많은 시스템에서 시스템 부팅 속도가 느려질 수 있습니다.
모든 옵션은 기본적으로 활성화되며, 이 인터페이스는 특정 가상 메모리 디버깅 기능을 선택적으로 활성화하거나 비활성화할 수 있도록 합니다.
옵션은 다음과 같습니다.
-
p
-
페이지 구조 init 시간 침입을 활성화합니다. -
-
(대시) - 위의 모든 옵션을 비활성화합니다.
-
p
업데이트된 커널 매개변수
- cgroup_no_v1 = [KNL]
이 매개변수는 버전 1(v1)에서 cgroup 컨트롤러 및 명명된 계층 구조를 비활성화합니다.
매개 변수는
cgroup_disable
커널 매개 변수와 같지만 cgroup v1에만 적용됩니다. 블랙리스트로 지정된 컨트롤러는 cgroup2에서 계속 사용할 수 있습니다. "all" 옵션은 모든 컨트롤러를 블랙리스트로 지정하고 "named" 옵션은 명명된 마운트를 비활성화합니다. "all"과 "named"를 모두 지정하면 v1 계층 구조가 모두 비활성화됩니다.형식: { { controller | "all" | "named" } [,{ controller | "all" | "named" }…] }
- crashkernel = size[KMG][@offset[KMG]][KNL]
kexec
시스템 호출을 통해 Linux는 패닉 시 'crash kernel'으로 전환할 수 있습니다. 이 매개 변수는 해당 커널 이미지에 대해 [offset, offset + size] 물리적 메모리 영역을 예약합니다.@offset
을 생략하면 적합한 오프셋이 자동으로 선택됩니다.[KNL, x86_64] 먼저 4G 아래의 지역을 선택하고
@offset
이 지정되지 않은 경우 4G 위의 지역을 예약하도록 대체합니다.자세한 내용은 업스트림 kdump 문서를 참조하십시오.
- l1tf = [X86]
이 매개변수는 영향을 받는 CPU에서 L1 Terminal Fault(L1TF) 취약점의 완화를 제어합니다.
옵션은 다음과 같습니다.
-
off
- 하이퍼바이저 완화 기능을 비활성화하고 경고를 보내지 않습니다. 또한 하이퍼바이저와 베어 메탈에 대해 스왑 크기 및 사용 가능한 RAM 제한 제한도 줄입니다. flush
- 기본값입니다.자세한 내용은 업스트림 커널 설명서를 참조하십시오.
-
- nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64]
이 매개변수는 Spectre variant 2 (indirect branch predict) 취약점에 대한 모든 완화 기능을 비활성화합니다.
시스템에서 이 매개 변수를 사용하여 데이터 누수를 허용할 수 있습니다.
- pci=option[,option…] [PCI]
다양한 PCI 하위 시스템 옵션.
옵션은 다음과 같습니다.
-
force_floating
[S390] - 유동 인터럽트의 강제 사용. -
nomio
[S390] - 메모리 입/출력(MIO) 명령을 사용하지 마십시오.
-
새로운 /proc/sys/kernel 매개변수
- hyperv_record_panic_msg
이 매개변수는 패닉 커널 메시지(kmsg) 데이터가 Hyper-V에 보고되는지 여부를 제어합니다.
값은 다음과 같습니다.
-
0
- 패닉 kmsg 데이터를 보고하지 마십시오. -
1
- 패닉 kmsg 데이터를 보고합니다. 기본 동작입니다.
-
새로운 /proc/sys/net 매개변수
- bpf_jit_limit
이 매개변수는 BPF JIT(Berkeley Packet Filter Just-in-Time) 컴파일러에 대한 메모리 할당에 대한 글로벌 제한을 적용하여 권한이 없는 JIT 요청을 초과하면 해당 요청을 거부합니다.
bpf_jit_limit
매개 변수에는 전역 제한 값(바이트)이 포함되어 있습니다.
업데이트된 /proc/sys/fs 매개변수
- dentry-state
dentries는 동적으로 할당되고 할당됩니다.
사용자는
/proc/sys/fs/dentry-state
파일을 읽고 다음 값을 검색할 수 있습니다.-
nr_dentry
- 할당된 총 들여쓰기 수(활성 + 사용되지 않음)를 표시합니다. -
nr_unused
- 현재 사용되지 않지만 향후 재사용을 위해 최근 Least(Least) 목록에 저장되는 dentries 수를 표시합니다. -
age_limit
- 메모리가 짧으면dcache
항목을 회수할 수 있는 시간(초)을 표시합니다. -
want_pages
-shrink_dcache_pages()
함수가 호출되고dcache
가 아직 정리되지 않은 경우 0이 아닙니다. -
nr_negative
- 파일에 매핑되지 않는 음수 들여쓰기인 사용하지 않은 들여쓰기 수를 표시합니다. 대신 사용자가 제공하는 존재하지 않는 파일을 신속하게 거부할 수 있습니다.
-
업데이트된 /proc/sys/kernel 매개변수
- msg_next_id, sem_next_id, and shm_next_id
참고:
- 커널은 새 오브젝트에 원하는 ID를 보장하지 않습니다. 이는 사용자 공간, "잘못" ID로 오브젝트를 처리하는 방법까지입니다.
- IPC(Inter-process Communication) 개체 할당 후 커널에서 기본값이 아닌 값으로 전환합니다. IPC 오브젝트 할당 syscall에 실패하면 값이 수정되지 않았거나 -1로 재설정되는 경우 정의되지 않습니다.