리눅스 / 유닉스 명령 : insmod

Linux / Unix 명령 insmod 실행 커널에 로드 가능한 모듈설치합니다 . insmod 는 커널의 내 보낸 기호 테이블의 모든 기호를 해석하여 모듈을 실행중인 커널에 연결하려고 시도합니다.

모듈 파일 이름이 디렉토리 나 확장자없이 주어지면, insmod 는 몇몇 일반적인 기본 디렉토리에서 모듈을 검색합니다. 환경 변수 MODPATH 는이 기본값을 겹쳐 쓸 수 있습니다. /etc/modules.conf 와 같은 모듈 구성 파일이 있으면 MODPATH에 정의 된 경로를 대체합니다.

환경 변수 MODULECONF 를 사용하여 기본 /etc/modules.conf (또는 /etc/conf.modules (비추천))에서 다른 구성 파일을 선택할 수도 있습니다. 이 환경 변수는 위의 모든 정의를 무시합니다.

환경 변수 UNAME_MACHINE 이 설정되면 modutils는 uname () 시스템 호출의 machine 필드 대신 해당 값을 사용합니다. 이는 주로 32 비트 사용자 공간에서 64 비트 모듈을 컴파일하거나 그 반대로 컴파일 할 때 UNAME_MACHINE 을 모듈 유형으로 설정할 때 주로 사용됩니다. 현재 modutils는 모듈의 전체 교차 빌드 모드를 지원하지 않으며 호스트 아키텍처의 32 비트 및 64 비트 버전 중에서 선택하는 것으로 제한됩니다.

옵션

-e persist_name , --persist = persist_name

이 모듈의 인스턴스화가 언로드 될 때로드 할 때 모듈의 영구 데이터를 읽고 쓰는 위치를 지정합니다. 이 옵션은 모듈에 지속적 데이터가없는 경우 자동으로 무시됩니다. 영구 데이터는이 옵션이 존재하는 경우 insmod에 의해서만 읽혀집니다. 기본적으로 insmod 는 영구적 인 데이터를 처리하지 않습니다.

축약 형으로 , -e "" (빈 문자열)는 insmod에 의해 modules.conf에 정의 된 persistdir 의 값으로 해석되고 발견 된 모듈 검색 경로에 상대적인 모듈의 파일명 .gz ",".o "또는".mod "로 끝납니다. modules.conf가 " persistdir = "을 지정하면 (즉, persistdir 이 빈 필드 인 경우)이 속기 양식은 자동으로 무시됩니다. ( modules.conf (5)를 참조하십시오.)

-f , --force

실행중인 커널의 버전과 모듈이 컴파일 된 커널의 버전이 일치하지 않더라도 모듈을로드하십시오. 이는 커널 버전 검사를 무시하며 기호 이름 검사에는 영향을 미치지 않습니다. 모듈의 심볼 이름이 커널과 일치하지 않으면 insmod 가 모듈을 강제로로드 할 수 없습니다.

-h , --help

옵션 요약을 표시하고 즉시 종료하십시오.

-k , --autoclean

모듈에 자동 청소 플래그를 설정하십시오. 이 플래그는 kerneld (8)에서 일정 시간 (보통 1 분) 동안 사용되지 않은 모듈을 제거하는 데 사용됩니다.

-L , --lock

동일한 모듈의 동시로드를 방지하려면 flock (2)을 사용하십시오.

-m , --map

stdout에로드 맵을 출력하여 커널 패닉이 발생할 경우 모듈을 디버그하는 것이 더 쉽습니다.

-n , --noload

더미를 실행하고 모듈을 커널에로드하는 것을 제외한 모든 작업을 수행하십시오. -m 또는 -O에 의해 요청 된 경우, 실행은 맵 또는 blob 파일을 생성합니다. 모듈이로드되지 않았으므로 실제 커널로드 주소는 알 수 없으므로 맵 및 BLOB 파일은 0x12340000의 임의로드 주소를 기반으로합니다.

-o module_name , --name = module_name

소스 개체 파일의 기본 이름에서 이름을 파생시키는 대신 모듈의 이름을 명시 적으로 지정합니다.

-O blob_name , --blob = blob_name

blob_name에 2 진 오브젝트를 저장하십시오. 결과는 섹션 조작 및 재배치 후에 커널에로드되는 것을 정확하게 보여주는 바이너리 BLOB (ELF 헤더 없음)입니다. -m 옵션은 오브젝트의 맵을 가져 오는 것이 좋습니다.

-p , --probe

모듈을 조사하여 모듈을 성공적으로로드 할 수 있는지 확인하십시오. 여기에는 모듈 경로에서 개체 파일 찾기, 버전 번호 확인 및 기호 확인이 포함됩니다. 재배치를 검사하거나지도 또는 blob 파일을 생성하지 않습니다.

-P 접두어 , --prefix = 접두사

이 옵션은 심볼 이름에 여분의 접두어가 추가 된 SMP 또는 bigmem 커널의 버전이있는 모듈에서 사용할 수 있습니다. 커널이 기호 버전으로 빌드 된 경우 insmod 는 "get_module_symbol"또는 "inter_module_get"의 정의에서 자동으로 접두사를 추출합니다.이 중 하나는 모듈을 지원하는 커널에 존재해야합니다. 커널에 기호 버전이 없지만 모듈이 기호 버전으로 빌드 된 경우 사용자는 -P 를 제공해야합니다.

-q , --quiet

해결되지 않은 기호 목록을 인쇄하지 마십시오. 버전 불일치에 대해 불평하지 마십시오. 문제는 insmod 의 종료 상태에만 반영됩니다.

-r , - root

일부 사용자는 비 루트 사용자 ID로 모듈을 컴파일 한 다음 루트로 모듈을 설치합니다. 이 프로세스는 modules 디렉토리가 root에 의해 소유되어 있더라도 비 루트 사용자 ID가 소유 한 모듈을 남겨 둘 수 있습니다. 비 루트 사용자 ID가 유출 된 경우, 침입자는 해당 사용자 ID가 소유 한 기존 모듈을 겹쳐 쓰고이 노출을 사용하여 루트 액세스까지 부트 스트랩 할 수 있습니다.

기본적으로 modutils는 루트가 소유하지 않은 모듈 사용 시도를 거부합니다. -r을 지정하면 검사를 토글하고 루트가 루트가 소유하지 않은 모듈을로드 할 수 있습니다. 참고 : 루트 확인의 기본값은 modutils가 구성 될 때 변경 될 수 있습니다.

루트 검사를 사용하지 않으려면 -r을 사용하고 구성 시간에는 "루트 확인 안 함"을 기본값으로 설정하는 것이 주요 보안 노출이므로 권장되지 않습니다.

-s , - syslog

모든 것을 터미널 대신 syslog (3)에 출력하십시오.

-S , --kallsyms

커널이 커널을 지원하지 않더라도로드 된 모듈에 강제로 kallsyms 데이터를 갖도록합니다. 이 옵션은 kallsyms 데이터없이 커널이로드되지만 선택된 모듈은 디버깅을 위해 kallsyms 가 필요한 작은 시스템을위한 것입니다. 이 옵션은 Red Hat Linux에서 기본값입니다.

-v , --verbose

장황하게하십시오.

-V , --version

insmod 의 버전을 표시합니다.

-X , --export ; -x , --noexport

모듈의 모든 외부 심볼을 ​​내보내거나 가져 오지 않습니다. 기본값은 기호를 내보내는 것입니다. 이 옵션은 모듈이 자체 제어 기호 표를 명시 적으로 내보내지 않으므로 더 이상 사용되지 않는 경우에만 유효합니다.

-Y , --ksymoops ; -y , --noksymoops

ksymoops 심볼을 ksyms에 추가하거나하지 마십시오. 이 심볼은 ksymoops 가이 모듈에 죄송합니다. 기본값은 ksymoops 심볼을 정의하는 것입니다. 이 옵션은 -X / -x 옵션과는 별개입니다.

ksymoops 심볼은로드 된 모듈 당 약 260 바이트를 추가합니다. 커널 공간이 부족하고 ksym을 최소 크기로 줄이려하지 않는 한, 기본값을 사용하여 정확한 Oops 디버깅을 얻으십시오. ksymoops 기호는 영구 모듈 데이터를 저장하는 데 필요합니다.

-N , - 숫자 전용

커널 버전에 대한 모듈 버전의 숫자 부분 만 확인하십시오. 예를 들어 모듈이 커널에 속하는지 결정할 때 EXTRAVERSION을 무시하십시오. 이 플래그는 커널 2.5 이상에서 자동으로 설정되며 이전 커널에서는 선택 사항입니다.

모듈 매개 변수

일부 모듈은 작업을 사용자 정의하기 위해로드 시간 매개 변수를 허용합니다. 이러한 매개 변수는 종종 컴퓨터마다 다르며 하드웨어에서 확인할 수없는 I / O 포트 및 IRQ 번호입니다.

2.0 계열 커널 용으로 빌드 된 모듈에서 정수 또는 문자 포인터 기호는 매개 변수로 처리되어 수정 될 수 있습니다. 2.1 계열 커널에서 시작하여 기호는 명시 적으로 매개 변수로 표시되어 특정 값만 변경 될 수 있습니다. 또한로드시 제공된 값을 확인하기위한 유형 정보가 제공됩니다.

정수의 경우 모든 값은 10 진수, 8 진수 또는 16 진수 일 수 있습니다. C : 17, 021 또는 0x11. 배열 요소는 쉼표로 구분 된 지정된 시퀀스입니다. 값을 생략하면 요소를 건너 뛸 수 있습니다.

2.0 계열 모듈에서 숫자로 시작하지 않는 값은 문자열로 간주됩니다. 2.1에서 시작하여 매개 변수의 유형 정보는 값을 문자열로 해석할지 여부를 나타냅니다. 값이 큰 따옴표 ( " )로 시작하면 문자열은 C, 이스케이프 시퀀스 및 모두로 해석됩니다. 쉘 프롬프트에서 따옴표 자체는 쉘 해석에서 보호해야 할 수도 있습니다.

GPL 라이센스 모듈 및 심볼

커널 2.4.10부터 모듈에는 MODULE_LICENSE ()를 사용하여 정의 된 라이센스 문자열이 있어야합니다. 여러 문자열은 GPL 호환으로 인식됩니다. 다른 라이센스 문자열 또는 전혀 라이센스가 없으면 모듈이 독점권으로 취급됩니다.

커널이 / proc / sys / kernel / tainted 플래그를 지원하면 insmod 는 GPL 라이센스없이 모듈을로드 할 때 오염 된 플래그를 '1'로 OR합니다. 커널이 오염을 지원하고 모듈이 라이센스없이로드되면 경고가 발행됩니다. 오염을 지원하지 않는 오래된 커널에서도 GPL과 호환되지 않는 MODULE_LICENSE () 가있는 모듈에 대해서는 항상 경고가 발행됩니다. 이렇게하면 새 커널 modutils가 이전 커널에서 사용될 때 경고가 최소화됩니다.

insmod -f (force) 모드는 오염을 지원하는 커널에서 오염 된 플래그를 '2'로 설정합니다. 항상 경고를 발행합니다.

일부 커널 개발자는 코드에서 내 보낸 심볼을 GPL 호환 라이센스가있는 모듈에서만 사용해야한다고 요구합니다. 이 기호는 일반 EXPORT_SYMBOL 대신 EXPORT_SYMBOL_GPL에 의해 내보내집니다. 커널과 다른 모듈이 내 보낸 GPL 전용 심볼은 GPL 호환 라이센스가있는 모듈에서만 볼 수 있으며이 심볼은 접두어가 ' GPLONLY_ '인 / proc / ksyms에 나타납니다. insmod 는 GPL 라이센스 모듈을 로딩 할 때 심볼의 GPLONLY_ 접두사를 무시하므로 모듈은 단지 접두어없이 일반 심볼 이름을 참조합니다. GPL 호환 라이센스가없는 모듈에는 GPL 전용 심볼을 사용할 수 없으며 라이센스가없는 모듈도 포함됩니다.

Ksymoops 지원

모듈을 사용할 때 커널 oops의 디버깅을 돕기 위해 insmod는 기본적으로 ksyms에 몇 가지 심볼을 추가합니다. -Y 옵션을 참조하십시오. 이 기호는 __insmod_modulename_으로 시작합니다. 모듈 이름 은 기호를 고유하게 만들어야합니다. 동일한 객체를 다른 모듈 이름으로 두 번 이상로드하는 것은 합법적입니다. 현재 정의 된 기호는 다음과 같습니다.

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile 은 객체가로드 된 파일의 이름입니다. 이렇게하면 ksymoops가 코드를 올바른 객체와 일치시킬 수 있습니다. mtime 은 해당 파일의 마지막으로 수정 된 타임 스탬프이며 stat가 실패하면 0입니다. version 은 모듈이 컴파일 된 커널 버전이고 사용할 수있는 버전이없는 경우 -1입니다. _O 기호의 첫 번째 주소는 모듈 헤더와 동일합니다.

__insmod_modulename_Sectionname_Llength

이 기호는 선택된 ELF 섹션의 시작 부분에 현재 .text, .rodata, .data, .bss 및 .sbss로 나타납니다. 섹션의 크기가 0이 아닌 경우에만 나타납니다. sectionname 은 ELF 섹션의 이름이고, length 는 섹션의 길이 (10 진수)입니다. 이 기호는 기호를 사용할 수 없을 때 ksymoops가 주소를 섹션에 매핑하는 데 도움이됩니다.

__insmod_modulename_Ppersistent_filename

모듈에 영구 데이터로 표시된 하나 이상의 매개 변수가 있고 영구 데이터 를 저장하기 위한 파일 이름 (위의 -e 참조)이있는 경우에만 insmod에 의해 작성됩니다.

모듈에서 커널 Oops를 디버깅 할 때의 또 다른 문제점은 로그 파일을 처리 할 때와 / proc / ksyms/ proc / modules의 내용 이 변경 될 수 있다는 것입니다. 이 문제를 극복하기 위해 / var / log / ksymoops 디렉토리가 존재하면 insmodrmmod 는 자동으로 / proc / ksyms/ proc / modules 를 접두어`date + % Y % m / var / log / ksymoops에 복사합니다 % d % H % M % S`. 시스템 관리자는 ksymoops 에게 스냅 샷 파일을 디버깅 할 때 사용할 스냅 샷 파일을 알릴 수 있습니다. 이 자동 복사본을 사용하지 않으려면 스위치가 없습니다. 이 작업을 원하지 않으면 / var / log / ksymoops를 생성하지 마십시오. 해당 디렉토리가 존재하면 루트가 소유하고 644 또는 600 모드 여야하며 매일이 스크립트를 실행해야합니다. 아래 스크립트는 insmod_ksymoops_clean 으로 설치됩니다.

알아 두어야 할 기본 정보

이름

insmod -로드 가능한 커널 모듈 설치

개요

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P 접두어 ] module [ symbol = value ...]