Linux Bash History를 중앙 Syslog로 전송하는 방법이 있을까요?

최민아 100 평판 포인트
2026-09-25T09:16:15.47+00:00

Linux 서버의 보안 감사 과정에서 사용자별 bash history가 중앙 syslog daemon으로 정상적으로 forwarding되지 않는다는 지적을 받았습니다. 현재 각 서버에서는 shell history가 로컬에만 남고 있어서, 중앙 logging 서버에서 사용자 command history를 추적하기가 어렵습니다.

/etc/profile에서 PROMPT_COMMAND와 logger를 사용해서 각 command 실행 시 history를 중앙 Syslog로 전송하도록 구성하려고 합니다. 예를 들어 PROMPT_COMMAND에서 history 또는 fc를 이용해 현재 실행된 command를 가져온 다음 logger를 호출하는 방식입니다.

이 구성을 /etc/profile에 적용할 때 multi-user 환경에서 history 중복 전송이나 recursive execution, interactive/non-interactive shell 문제를 피하려면 어떤 방식으로 설정하는 게 좋을까요? 또한 logger의 facility/severity를 어떻게 지정하는 것이 일반적인지, rsyslog 또는 syslog-ng에서 중앙 수집 서버로 forwarding할 때 추가로 고려해야 할 사항이 있는지도 궁금합니다.

비즈니스용 Windows | Windows 365 Enterprise
댓글 0개 설명 없음

질문 작성자가 수락한 답변
Hoang Le 6,275 평판 포인트 독립 자문가
2026-09-25T09:49:21.35+00:00

최민아 님께,

PROMPT_COMMAND와 logger를 활용하여 /etc/profile을 설정하는 방식은 기본적인 명령어 감사(auditing)에는 효과적일 수 있으나, 기업용 솔루션으로는 권장되지 않습니다. 다중 사용자 환경에서 히스토리 기반 로깅은 우회 가능성, 중복 기록, 비대화형(non-interactive) 셸에서의 명령어 누락, 그리고 사용자가 셸 히스토리 파일을 임의로 조작함으로써 발생하는 데이터 불일치 등의 문제에 취약합니다. 보안 감사 요건을 충족하기 위해서는 커널 수준에서 명령어 실행을 포착하고 중앙 SIEM이나 syslog 인프라로 안정적인 전송이 가능한 Linux Audit Framework(auditd)의 execve 감사 기능을 사용하는 것이 일반적으로 더 바람직합니다.

만약 PROMPT_COMMAND 방식을 계속 사용하시겠다면, 대화형(interactive) Bash 세션으로만 적용 범위를 제한하고, 중복 기록 방지 로직을 포함하며, 사용자, UID, TTY, 소스 호스트, 작업 디렉토리, 실행된 명령어 등의 정보를 기록하도록 설정해야 합니다. 셸 감사 이벤트를 일반 시스템 로그와 분리하기 위해 흔히 local6.notice와 같은 전용 설비(facility)가 사용됩니다. 로그를 중앙에서 수집할 때는 메시지 손실을 방지하고 무결성을 높이기 위해, UDP 대신 TLS 암호화가 적용된 TCP를 통해 로그를 전송하도록 rsyslog나 syslog-ng를 구성하십시오.

제 답변이 도움이 되셨다면 **'답변 채택(Accept the answer)'**을 눌러 주시기 바랍니다.

감사합니다.

HL.

이 대답이 도움이 되었나요?

1명이 이 답변이 도움이 된다고 생각했습니다.
댓글 0개 설명 없음

0 추가 답변

정렬 기준: 가장 유용함

답변

질문 작성자는 답변을 '승인됨'으로 표시하고, 중재자는 답변을 '추천됨'으로 표시할 수 있습니다. 이를 통해 사용자는 해당 답변이 작성자의 문제를 해결했다는 것을 알 수 있습니다.