안녕하세요.
컴플라이언스 요구사항이 있는 환경에서는 사용자의 로컬 .bash_history 파일에만 의존하는 방식은 일반적으로 충분하지 않습니다. History 파일은 사용자가 수정하거나 삭제할 수 있으며, 여러 SSH 세션이 동시에 실행되는 환경에서는 세션 간 기록이 일관되지 않을 수도 있습니다. 보다 안정적인 방법은 PAM, Shell auditing 또는 Linux Audit framework를 사용하여 세션 수준에서 명령어 실행 기록을 수집하고, 생성된 로그를 중앙 syslog/SIEM 플랫폼으로 전송하는 것입니다.
저는 PAM session logging을 활성화하고 이를 rsyslog 또는 syslog-ng와 연동하는 방식을 권장합니다. 이렇게 구성하면 명령어 실행 기록을 로컬에만 저장하지 않고 중앙 로그 서버로 즉시 전송할 수 있습니다. 여러 사용자가 동시에 SSH 세션을 유지하는 환경에서 명령어가 누락되는 것을 방지하려면, 각각의 명령어 로그에 사용자 이름(username), Source IP 주소, TTY, Session ID, Timestamp 등의 메타데이터를 포함하는 것이 좋습니다. 이렇게 하면 각 명령어가 어느 사용자의 어느 SSH 세션에서 실행되었는지 정확하게 추적할 수 있으며, 로그 분석 과정에서 서로 다른 사용자의 명령어가 섞이는 문제도 줄일 수 있습니다.
보다 강력한 감사 체계가 필요한 경우에는 PAM logging과 함께 Linux Audit (auditd) 또는 실시간 session-recording tool을 사용하는 것도 권장합니다. 이러한 방식은 Shell history 파일에 의존하지 않고 명령어 실행을 실시간으로 기록할 수 있기 때문에 보다 완전한 audit trail을 제공할 수 있습니다. 또한 사용자가 Shell history를 삭제하거나 비활성화하더라도 명령어 실행 기록을 확보하는 데 도움이 됩니다. 로그를 중앙 서버로 전달할 때는 안정적인 전송 방식을 사용하고, 시스템 사용량이 높은 시간대에도 로그가 정상적으로 전달되고 있는지 지속적으로 확인하는 것이 좋습니다.
Best Practice로는 여러 개의 SSH 세션을 동시에 생성하여 실제 환경과 유사한 조건에서 설정을 테스트하는 것을 권장합니다. 각 세션에서 여러 명령어를 실행한 후 모든 명령어가 고유한 Session ID와 정확하게 매핑되는지 확인해야 합니다. 이를 통해 대부분의 audit requirement를 충족할 수 있을 뿐만 아니라, 향후 보안 사고 조사와 compliance reporting 과정에서도 사용자 활동을 보다 쉽게 추적하고 분석할 수 있습니다.
위 내용이 문제 해결에 도움이 되었기를 바랍니다. 답변이 도움이 되셨다면 “Accept Answer” 를 눌러주시면 감사하겠습니다.
Jason