7.5. 감사 규칙 정의
감사 시스템은 로그 파일에서 캡처할 항목을 정의하는 일련의 규칙에서 작동합니다. 다음 유형의 감사 규칙을 지정할 수 있습니다.
- 제어 규칙
- 감사 시스템의 동작과 일부 구성을 수정할 수 있도록 허용합니다.
- 파일 시스템 규칙
- 파일 감시라고도 하는 경우 특정 파일 또는 디렉터리에 대한 액세스 감사를 허용합니다.
- 시스템 호출 규칙
- 지정된 프로그램에서 수행하는 시스템 호출을 로깅할 수 있습니다.
감사 규칙을 설정할 수 있습니다.
- auditctl 유틸리티를 사용하는 명령줄에서 다음을 수행합니다. 이러한 규칙은 재부팅 후에도 유지되지 않습니다. 자세한 내용은 참조하십시오. 7.5.1절. “auditctl을 사용하여 감사 규칙 정의”
/etc/audit/audit.rules
파일에서 자세한 내용은 참조하십시오. 7.5.3절. “/etc/audit/audit.rules
파일에서 영구 감사 규칙 및 제어 정의”
7.5.1. auditctl을 사용하여 감사 규칙 정의
auditctl 명령을 사용하면 감사 시스템의 기본 기능을 제어하고 기록된 감사 이벤트를 결정하는 규칙을 정의할 수 있습니다.
참고
감사 서비스 및 감사 로그 파일과 상호 작용하는 모든 명령에는 root 권한이 필요합니다. root 사용자로 이러한 명령을 실행해야 합니다. 또한 사용자 메시지를 기록하려면 감사 서비스와 CAP_AUDIT_WRITE를 설정하려면 CAP_AUDIT_CONTROL이 필요합니다.
제어 규칙 정의
다음은 감사 시스템의 동작을 수정할 수 있는 일부 제어 규칙입니다.
-b
- 커널에서 기존 감사 버퍼의 최대 크기를 설정합니다. 예를 들면 다음과 같습니다.
~]# auditctl -b 8192
-f
- 다음과 같이 심각한 오류가 감지될 때 수행되는 작업을 설정합니다.
~]# auditctl -f 2
위의 구성에서는 심각한 오류가 발생하는 경우 커널 패닉을 트리거합니다. -e
- 감사 시스템을 활성화하고 비활성화하거나 해당 구성을 잠급니다. 예를 들면 다음과 같습니다.
~]# auditctl -e 2
위의 명령은 감사 구성을 잠급니다. -r
- 생성된 메시지의 속도를 초당 설정합니다. 예를 들면 다음과 같습니다.
~]# auditctl -r 0
위의 구성은 생성된 메시지에 대한 속도 제한을 설정하지 않습니다. -s
- 감사 시스템의 상태를 보고합니다. 예를 들면 다음과 같습니다.
~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0
-l
- 현재 로드된 모든 감사 규칙을 나열합니다. 예를 들면 다음과 같습니다.
~]# auditctl -l -w /etc/passwd -p wa -k passwd_changes -w /etc/selinux -p wa -k selinux_changes -w /sbin/insmod -p x -k module_insertion ⋮
-D
- 다음과 같이 현재 로드된 모든 감사 규칙을 삭제합니다.
~]# auditctl -D No rules
파일 시스템 규칙 정의
파일 시스템 규칙을 정의하려면 다음 구문을 사용합니다.
auditctl -w path_to_file -p permissions -k key_name
다음과 같습니다.
- path_to_file 은 감사되는 파일 또는 디렉터리입니다.
- 권한은 로깅된 권한입니다.
- R - 파일 또는 디렉토리에 대한 읽기 액세스.
w
- 파일 또는 디렉토리에 대한 쓰기 액세스입니다.- X - 파일 또는 디렉토리에 대한 액세스를 실행합니다.
a
- 파일 또는 디렉터리의 특성을 변경합니다.
- key_name 은 특정 로그 항목을 생성한 규칙 또는 규칙 집합을 식별하는 데 도움이 되는 선택적 문자열입니다.
예 7.1. 파일 시스템 규칙
/etc/passwd 파일의 모든 쓰기 액세스 권한을 로깅하는 규칙과
/etc/passwd
파일을 변경하는 규칙을 정의하려면 다음 명령을 실행합니다.
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
-k
옵션 뒤에 있는 문자열은 임의적입니다.
/etc/selinux/
디렉터리에 있는 모든 파일에 대한 쓰기 액세스 권한을 로깅하는 규칙을 정의하려면 다음 명령을 실행합니다.
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
모듈을 Linux 커널에 삽입하는 /sbin/insmod 명령의 실행을 기록하는 규칙을 정의하려면 다음 명령을 실행합니다.
~]# auditctl -w /sbin/insmod -p x -k module_insertion
시스템 호출 규칙 정의
시스템 호출 규칙을 정의하려면 다음 구문을 사용합니다.
auditctl -a action,filter -S system_call -F field=value -k key_name
다음과 같습니다.
- action 및 filter 는 특정 이벤트가 기록될 때를 지정합니다. 작업을
항상
또는 사용하지않을
수 있습니다.filter 는 이벤트에 적용되는 커널 규칙 일치 필터를 지정합니다. rule-matching 필터는작업
,exit
,user
,exclude
중 하나일 수 있습니다. 이러한 필터에 대한 자세한 내용은 7.1절. “감사 시스템 아키텍처” 시작을 참조하십시오. - system_call 은 시스템 호출을 해당 이름으로 지정합니다. 모든 시스템 호출 목록은
/usr/include/asm/unistd_64.h
파일에서 확인할 수 있습니다. 여러 시스템 호출을 자체-S
옵션 다음에 지정된 하나의 규칙으로 그룹화할 수 있습니다. - field=value 지정된 아키텍처, 그룹 ID, 프로세스 ID 등을 기반으로 이벤트를 일치시키도록 규칙을 추가로 수정하는 추가 옵션을 지정합니다. 사용 가능한 모든 필드 유형 및 해당 값의 전체 목록은 auditctl(8) 도움말 페이지를 참조하십시오.
- key_name 은 특정 로그 항목을 생성한 규칙 또는 규칙 집합을 식별하는 데 도움이 되는 선택적 문자열입니다.
예 7.2. 시스템 호출 규칙
adjtimex
또는 settimeofofday
시스템 호출이 프로그램에서 사용될 때마다 로그 항목을 생성하는 규칙을 정의하기 위해 64비트 아키텍처를 사용하는 시스템은 다음 명령을 실행합니다.
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
파일이 삭제될 때마다 로그 항목을 만드는 규칙을 정의하거나 ID가 1000 이상인 시스템 사용자가 이름을 변경하려면 다음 명령을 실행합니다.
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
-F auid!=4294967295
옵션은 로그인 UID가 설정되지 않은 사용자를 제외하는 데 사용됩니다.
시스템 호출 규칙 구문을 사용하여 파일 시스템 규칙을 정의할 수도 있습니다. 다음 명령은
-w /etc/shadow -p wa
파일 시스템 규칙과 유사한 시스템 호출 규칙을 생성합니다.
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa