Linux 커널 Taint 플래그 확인 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 커널의 taint 상태를 확인하는 방법을 배우게 됩니다. /proc/sys/kernel/tainted 파일을 검사하여 커널이 잠재적으로 지원되지 않거나 수정된 상태로 실행되고 있는지 확인하는 방법을 살펴봅니다.

초기 확인 후, dmesg 명령을 사용하여 커널 메시지 버퍼를 검사하여 커널 taint 의 특정 이유를 확인하는 방법을 배우게 됩니다. 마지막으로, 커널의 상태와 로드된 모듈을 이해하는 데 도움이 될 수 있는 /proc/kallsyms를 사용하여 커널 심볼을 검사하는 방법을 살펴봅니다.

cat /proc/sys/kernel/tainted로 Taint 상태 확인

이 단계에서는 Linux 커널의 "taint" 상태를 확인하는 방법을 배우겠습니다. 커널은 비-GPL (General Public License, 일반 공중 사용 허가) 모듈이 로드되거나 문제 또는 비표준 구성을 나타낼 수 있는 특정 이벤트가 발생할 경우 "tainted"될 수 있습니다. taint 상태를 확인하는 것은 커널이 잠재적으로 지원되지 않거나 수정된 상태로 실행되고 있는지 빠르게 확인하는 방법입니다.

/proc 파일 시스템의 특수 파일 내용을 읽어 커널의 taint 상태를 확인할 수 있습니다. /proc 파일 시스템은 프로세스 및 기타 시스템 정보를 제공하는 가상 파일 시스템입니다.

아직 열려 있지 않다면 터미널을 엽니다. 데스크탑 왼쪽의 Xfce 터미널 아이콘을 클릭하여 열 수 있습니다.

이제 cat 명령을 사용하여 /proc/sys/kernel/tainted 파일의 내용을 표시합니다. cat 명령은 파일 내용을 연결하고 표시하는 데 사용됩니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

cat /proc/sys/kernel/tainted

출력은 단일 숫자입니다.

0
  • 0은 커널이 taint 되지 않았음을 의미합니다.
  • 0 이 아닌 값은 커널이 taint 되었음을 나타냅니다. 특정 숫자는 각 비트가 taint 의 다른 이유를 나타내는 비트마스크입니다.

예를 들어, 출력이 1이면 독점 모듈이 로드되었음을 나타냅니다. 4이면 커널 경고가 발생했음을 나타낼 수 있습니다.

LabEx 환경에서는 커널이 처음에 taint 되지 않아야 하므로 0이 표시되어야 합니다. 이는 깨끗한 커널 상태를 나타내는 좋은 신호입니다.

taint 상태를 이해하는 것은 커널 문제를 디버깅하거나 표준 커널 구성을 실행하고 있는지 확인하는 데 중요합니다.

다음 단계로 진행하려면 계속을 클릭하십시오.

dmesg 에서 Taint 세부 정보 확인

이전 단계에서는 /proc/sys/kernel/tainted를 사용하여 커널의 taint 상태를 확인했습니다. 해당 파일은 커널이 taint 되었는지 여부를 나타내는 숫자 코드를 제공하지만, taint 되었는지는 알려주지 않습니다. taint 이유를 포함하여 커널 메시지에 대한 자세한 정보를 얻으려면 dmesg 명령을 사용할 수 있습니다.

dmesg 명령은 커널 링 버퍼를 검사하는 데 사용됩니다. 이 버퍼는 장치 드라이버 정보, 오류 및 경고를 포함한 커널의 메시지를 저장합니다. 커널이 taint 되면 일반적으로 그 이유를 설명하는 메시지가 링 버퍼에 기록됩니다.

아직 열려 있지 않다면 터미널을 엽니다.

이제 다음 명령을 입력하고 Enter 키를 누릅니다.

dmesg

이 명령은 시스템이 시작된 이후의 모든 커널 메시지를 표시하여 잠재적으로 많은 양의 텍스트를 출력합니다.

tainting 과 관련된 특정 정보를 찾기 위해 dmesggrep 명령과 결합할 수 있습니다. grep은 텍스트 패턴을 검색하는 강력한 도구입니다. "taint"라는 단어가 포함된 줄을 검색합니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

dmesg | grep taint

| 기호는 파이프라고 합니다. 왼쪽 명령 (dmesg) 의 출력을 가져와 오른쪽 명령 (grep) 에 입력으로 보냅니다. 따라서 이 명령은 먼저 모든 커널 메시지를 가져온 다음 "taint"라는 단어가 포함된 줄만 표시하도록 필터링합니다.

커널이 taint 되지 않은 경우 (이 환경에서 예상대로), 이 명령은 출력을 생성하지 않을 수 있습니다. 이는 정상이며 taint 이벤트가 기록되지 않았음을 나타냅니다.

커널이 taint 되었다면, 다음과 유사한 줄이 표시됩니다 (정확한 메시지는 tainting 의 이유에 따라 다름).

[  ... ] kernel: Linux version ... (tainted: G)
[  ... ] kernel: Disabling lock debugging due to kernel taint

(tainted: G) 부분은 커널이 taint 되었음을 나타내고, 문자 G는 특히 독점 모듈이 로드되었음을 의미합니다. 다른 문자는 다른 taint 이유를 나타냅니다 (예: 독점 모듈의 경우 P, 강제 모듈 로드의 경우 F, 제한된 라이선스 모듈의 경우 R 등).

/proc/sys/kernel/tainted가 0 이 아닌 값을 표시할 때 dmesg | grep taint를 사용하는 것은 커널 문제를 진단하는 데 중요한 단계입니다.

다음으로 이동하려면 계속을 클릭하십시오.

cat /proc/kallsyms로 커널 심볼 검사

이 단계에서는 /proc 파일 시스템의 또 다른 중요한 파일인 /proc/kallsyms를 살펴보겠습니다. 이 파일에는 명시적으로 static으로 표시되지 않은 모든 커널 심볼 (함수 및 변수) 의 주소와 이름이 포함되어 있습니다. 이는 커널 디버깅 및 커널 내부 작동 방식을 이해하는 데 필수적인 도구입니다.

/proc/kallsyms 파일은 각 커널 심볼을 메모리 주소, 유형 및 이름과 함께 나열합니다. 각 줄의 형식은 일반적으로 다음과 같습니다.

<address> <type> <symbol_name>
  • <address>: 심볼이 위치한 메모리 주소입니다.
  • <type>: 심볼의 유형을 나타내는 단일 문자 (예: 텍스트/코드의 경우 t 또는 T, 데이터의 경우 d 또는 D, BSS 의 경우 b 또는 B, 읽기 전용 데이터의 경우 r 또는 R, 약한 심볼의 경우 w 또는 W, 정의되지 않은 심볼의 경우 U). 소문자는 로컬 심볼을 나타내고 대문자는 전역 심볼을 나타냅니다.
  • <symbol_name>: 커널 함수 또는 변수의 이름입니다.

아직 열려 있지 않다면 터미널을 엽니다.

이제 cat 명령을 사용하여 /proc/kallsyms의 내용을 살펴보겠습니다. 이 파일은 매우 크므로 출력이 빠르게 스크롤됩니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

cat /proc/kallsyms

각각 커널 심볼을 나타내는 긴 줄 목록이 표시됩니다.

...
ffffffff... T sys_read
ffffffff... T sys_write
ffffffff... D jiffies
...

이 출력을 더 관리하기 쉽고 특정 심볼을 찾기 위해 다시 grep을 사용할 수 있습니다. 예를 들어, 프로세스 관리를 위한 핵심 커널 함수인 "schedule"과 관련된 심볼을 검색해 보겠습니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

cat /proc/kallsyms | grep schedule

이렇게 하면 "schedule"이라는 단어가 포함된 줄만 표시하도록 출력이 필터링됩니다.

ffffffff... T schedule
ffffffff... T schedule_timeout
ffffffff... T schedule_hrtimeout_range
...

이 필터링된 출력은 읽기가 훨씬 쉽고 관심 있는 특정 커널 함수 또는 변수의 주소와 유형을 찾을 수 있습니다.

/proc/kallsyms를 탐색하면 커널의 구조와 사용 가능한 함수에 대한 귀중한 통찰력을 얻을 수 있습니다. 이는 커널 개발 또는 고급 디버깅을 수행하는 모든 사람에게 기본적인 리소스입니다.

이제 /proc 파일 시스템과 기본 Linux 명령을 사용하여 커널의 taint 상태를 확인하고 커널 심볼을 검사하는 방법을 배웠습니다.

이 랩을 완료하려면 계속을 클릭하십시오.

요약

이 랩에서는 Linux 커널의 taint 상태를 확인하는 방법을 배웠습니다. 먼저 cat /proc/sys/kernel/tainted 명령을 사용하여 커널이 taint 되었는지 빠르게 확인하는 것으로 시작했습니다. 여기서 값 0은 클린 상태를 나타내고 0 이 아닌 값은 taint 된 커널을 나타내며, 특정 숫자는 이유의 비트마스크를 나타냅니다.

그런 다음 dmesg를 사용하여 커널 메시지 버퍼를 검사하여 모든 taint 의 세부 정보를 확인했습니다. 이를 통해 커널이 taint 되도록 한 이벤트와 관련된 특정 메시지를 확인할 수 있으며, 숫자 코드만으로는 제공되지 않는 더 많은 컨텍스트를 제공합니다. 마지막으로, 고급 디버깅 및 커널의 내부 상태를 이해하는 데 유용할 수 있는 cat /proc/kallsyms를 사용하여 커널 심볼을 검사하는 방법을 살펴보았습니다. 이 단계는 제공된 내용에서 완전히 자세하게 설명되지는 않았습니다.