EC2 Linux 인스턴스의 스크린샷과 시스템 로그에 "audit: backlog limit exceeded" 오류가 표시되는 이유는 무엇이며 이를 방지하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 18일

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스의 스크린샷과 시스템 로그에 "audit callbacks suppressed" 및 "audit: backlog limit exceeded" 오류 메시지가 표시됩니다. 이러한 메시지가 표시되는 이유는 무엇이며 다시 표시되지 않도록 하려면 어떻게 해야 합니까?

간략한 설명

Linux 시스템의 감사 백로그 버퍼는 운영 체제가 감사 이벤트를 유지 관리하거나 기록하는 데 사용하는 커널 수준 소켓 버퍼 대기열입니다. 새 감사 이벤트가 트리거되면 시스템은 이벤트를 기록하고 감사 백로그 버퍼 대기열에 추가합니다.

backlog_limit 파라미터 값은 감사 백로그 버퍼의 수입니다. 이 파라미터는 다음 예와 같이 기본적으로 320으로 설정됩니다.

# auditctl -s
enabled 1
failure 1
pid 2264
rate_limit 0
backlog_limit 320
lost 0
backlog 0

기록된 감사 이벤트의 수가 기본값인 320개를 초과하면 인스턴스에서 다음 오류가 발생합니다.

audit: audit_backlog=321 > audit_backlog_limit=320 

audit: audit_lost=44393 audit_rate_limit=0 audit_backlog_limit=320 

audit: backlog limit exceeded

-또는-

audit_printk_skb: 153 callbacks suppressed

audit_printk_skb: 114 callbacks suppressed

또한 감사 버퍼 대기열이 용량에 도달하거나 용량을 초과하면 인스턴스가 중단되거나 응답하지 않는 상태로 유지될 수 있습니다.

백로그 제한 초과 오류를 방지하려면 backlog_limit 파라미터 값을 늘리십시오. 대형 서버에서는 트리거되는 감사 로그의 수가 많으므로 버퍼 공간을 늘려 오류 메시지를 방지할 수 있습니다.

참고: 감사 버퍼를 늘리면 인스턴스의 메모리가 더 많이 사용됩니다. backlog_limit 파라미터에 대해 설정할 값은 인스턴스의 총 메모리에 따라 다릅니다. 시스템에 메모리가 충분하면 기존 backlog_limit 파라미터 값을 두 배로 늘릴 수 있습니다.

다음은 감사 백로그에 필요한 메모리를 계산하는 방법입니다. 이 계산 방법을 사용하여 인스턴스에 메모리 부담을 주지 않고 백로그 대기열에 대해 설정할 크기를 결정할 수 있습니다.

감사 버퍼 하나 = 8,970바이트
기본 감사 버퍼 수(backlog_limit 파라미터) = 320
320 * 8,970 = 2,870,400바이트 또는 2.7MiB

감사 버퍼의 크기는 MAX_AUDIT_MESSAGE_LENGTH 파라미터에 의해 정의됩니다. 자세한 내용은 github.com의 Linux 감사 라이브러리의 MAX_AUDIT_MESSAGE_LENGTH를 참조하십시오.

참고: 인스턴스에 액세스할 수 없고 시스템 로그에 backlog limit exceeded 메시지가 표시될 경우 인스턴스를 중지했다가 다시 시작하십시오. 그런 후 다음 단계를 수행하여 감사 버퍼 값을 변경하십시오.

​해결 방법

참고: 이 예에서는 backlog_limit 파라미터 값을 버퍼 8,192개로 변경합니다. 앞의 계산 방법에 따르면 버퍼 8,192개는 메모리 70MiB와 같습니다. 메모리 계산에 따라 해당하는 모든 값을 사용할 수 있습니다.

1. SSH를 사용하여 인스턴스에 액세스하십시오.

2. 현재 감사 버퍼 크기를 확인하십시오.

참고: backlog_limit 파라미터는 -b로 나열됩니다. 자세한 내용은 auditctl man page의 auditctl(8)을 참조하십시오.

Amazon Linux 1 및 systemd가 없는 기타 운영 체제:

$ sudo cat /etc/audit/audit.rules
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# Disable system call auditing.
# Remove the following line if you need the auditing.
-a never,task

# Feel free to add below this line. See auditctl man page

Amazon Linux 2 및 systemd를 사용하는 기타 운영 체제:

$ sudo cat /etc/audit/audit.rules
# This file is automatically generated from /etc/audit/rules.d
-D
-b 320
-f 1

3. vi 편집기와 같은 편집기를 사용하여 audit.rules 파일에 액세스하십시오.

Amazon Linux 1 및 systemd를 사용하지 않는 기타 운영 체제:

$ sudo vi /etc/audit/audit.rules

Amazon Linux 2 및 systemd를 사용하는 기타 운영 체제:

$ sudo vi /etc/audit/rules.d/audit.rules

4. -b 파라미터를 더 큰 값으로 편집하십시오. 다음 예에서는 -b 값을 8,192로 변경합니다.

$ sudo cat /etc/audit/audit.rules
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 8192

# Disable system call auditing.
# Remove the following line if you need the auditing.
-a never,task

# Feel free to add below this line. See auditctl man page

$ sudo auditctl -s
enabled 1
failure 1
pid 2264
rate_limit 0
backlog_limit 320
lost 0
backlog 0

5. 감사 서비스를 다시 시작하십시오. 새로운 backlog_limit 값이 적용됩니다. 다음 예와 같이 auditctl -s에서도 이 값이 업데이트됩니다.

# sudo service auditd stop
Stopping auditd:                                           [  OK  ]
# sudo service auditd start
Starting auditd:                                           [  OK  ]
# auditctl -s
enabled 1
failure 1
pid 26823
rate_limit 0
backlog_limit 8192
lost 0
backlog 0

참고: 인스턴스에 액세스할 수 없고 시스템 로그에 backlog limit exceeded 메시지가 표시될 경우 인스턴스를 중지했다가 다시 시작하십시오. 그런 다음, 앞의 단계를 수행하여 감사 버퍼 값을 변경하십시오.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?