쉘에서 실행된 명령을 추적/기록하는 방법은 무엇입니까?

쉘에서 실행된 명령을 추적/기록하는 방법은 무엇입니까?

쉘에서 명령이 실행되기 전에 로그 파일에 쓸 수 있습니까? SSH 세션의 모든 명령을 기록하는 SSH 패치가 있다는 것을 알고 있지만 cgi 또는 PHP 스크립트를 통해 웹 서버에서 실행되는 명령도 기록하고 싶습니다.

답변1

쉘에서 명령이 실행되기 전에 로그 파일에 쓸 수 있습니까?

다른 질문을 고려하여 이에 대해 생각하는 또 다른 방법은 "실행된 모든 명령에 대한 기록을 얻으려면 어떻게 해야 합니까?"라고 생각했습니다.

auditdRedHat에서 개발했지만 모든 Linux에서 사용할 수 있는 데몬이 제공하는 회계 도구를 사용하면 이 작업을 수행할 수 있습니다. 이 소프트웨어는 실행된 명령뿐만 아니라 소비된 리소스, 세션 길이, SUID 바이너리 사용, 중요한 시스템 파일 변경 사항, 파일 권한 변경 사항, 시스템 시간 변경 사항 등을 기록하는 메커니즘을 제공합니다. 이는 포괄적이며 파일 및 시스템 호출을 모니터링할 수 있습니다. 매개변수를 사용하여 부팅 시 커널에서 켤 수도 있습니다 audit=1. 실행된 명령이 콘솔, SSH 세션 또는 데몬에서 실행되는지 여부는 중요하지 않습니다. 로그 파일은 일반적으로 저장되도록 구성되며 /var/log/audit실행된 명령을 찾고 있는 경우 grep exec /var/log/audit/audit.log예를 들어 다음을 사용하여 찾을 수 있습니다.


보안 및 로깅의 일반 개념

나머지는 질문의 범위를 벗어나지만 질문의 안전 태그나 향후 독자로 인해 중요할 수 있습니다. 전반적인 보안이 우수합니다.기준선아마도 Linux 시스템에 가장 관련성이 높은 구성은 다음과 같습니다.디샤 RHEL-6 STIG(보기 쉽게 제공되는 비공식 링크) 시스템에도 사용할 수 있는 감사 관련 항목이 많이 있습니다. 이러한 개념의 정확한 구현은 주요 Linux 배포판에 따라 다를 수 있지만 진행 상황을 요약하는 데 여전히 유용합니다.기준선안전 관행. (DISA는 다른 많은 시스템 및 소프트웨어 제품에 대한 다른 많은 좋은 벤치마크도 제공합니다.)

모니터링과 로깅이 훌륭하지만, 메시지가 계속 흐르면서 로그의 모든 줄을 읽고 마음 속에서 한 이벤트를 다른 이벤트와 효과적으로 연관시키는 작업을 실제로 계속 수행하시겠습니까? 또한 기록된 데이터의 무결성이 가장 중요하다는 점을 고려하십시오. 회계 소프트웨어가 설치되고 구성된 시스템이 절대로 손상되지 않을 것이라고 믿을 수 있습니까? 이와 같은 폭로는 어떻습니까?쉘 쇼크?

따라서 로그 파일 데이터의 변조 가능성을 최소화하고, 로그 정보를 분석하고 대응할 수 있는 소프트웨어를 사용해야 합니다.

로깅 데이터의 무결성을 유지하기 위한 한 가지 전략은 모든 로그 기록이 로컬에 저장될 뿐만 아니라 중앙 로그 서버로 전달되어 원격에도 저장되도록 하는 것입니다.

[Production Server] <---> [NIC 1] <--production traffic--> [Internet]
                    <---> [NIC 2] <--management traffic--> [Log Server]

로그 서버가 syslog용 TCP/UDP 514와 같은 로깅 소프트웨어에서 사용하는 포트를 통해 프로덕션 서버의 트래픽만 수락하는지 확인하세요. 관리 네트워크에 개인 네트워크를 사용하는 등(RFC 1918) 사용 가능한 수단을 사용하여 관리 네트워크를 가능한 한 비공개로 만듭니다. 가능하다면 VLAN ID를 구현하고 허용된 모든 예외를 거부하도록 방화벽을 구성하십시오. 네트워크에 가능한 한 많은 대역폭을 제공하고 가능한 한 적게 활용하십시오. 중앙 syslog 서버가 네트워크의 장치 수에 따라 과도해질 수 있으므로 별도의 "syslog 네트워크"를 설계할 수도 있습니다. 시스템 로그 메시지를 로드합니다. 결과적으로 UDP를 사용할 때 메시지가 삭제될 수 있습니다. 대신 TCP 사용을 고려할 수도 있지만 이는 모든 디스크 공간이 고갈될 때까지 syslog 메시지가 syslog 클라이언트의 대기열에 쌓여 사실상 "돌을 쏘는" 것이기 때문에 문제가 될 수도 있습니다. (따라서 로컬 로그 파일에 사용할 수 있는 최대 디스크 공간을 정의하고 시스템 파티션이나 볼륨에서 과도한 디스크 사용을 방지하기 위해 별도의 파티션이나 논리 볼륨을 생성하는 것이 좋습니다.) rsyslog를 사용하는 경우 추가로 클라이언트에서 중앙 로깅 서버를 지정하려면 계정 관련 로깅을 전달하기 위해 rsyslog에서 audispd 플러그인을 활성화해야 합니다.

정보를 엄격하게 검사하고 잠재적으로 대응하지 않는다면 보안상의 이유로 무엇이든 기록할 이유가 무엇입니까? 이것만으로도 어려운 작업이 될 수 있습니다. 따라서 로그 파일 분석 소프트웨어의 선택도 중요합니다. 위협이 무엇인지, 그리고 우리가 적시에 대응할 수 있도록 우리가 이해할 수 있도록 이를 우리에게 제시하는 방법을 알거나 알 수 있도록 구성되어야 합니다. 그렇지 않으면 당사의 보안 로그는 사고 후 분석을 제외하고는 거의 사용되지 않습니다. 소프트웨어는 syslog 데이터를 보내도록 구성된 모든 장치(서버, 워크스테이션, 라우터) 또는 로그 데이터를 보낼 수 있는 모든 장치에서 중앙 로그 서버의 데이터를 분석할 수 있어야 합니다.

답변2

설정할 수 있습니다회계

그런 다음 awk 또는 sed를 사용하여 원하는 문자열을 추출하십시오.

답변3

명령이 출력을 반환하는 경우 명령을 실행하고 반환된 출력을 파일 로그에 저장할 수 있습니다.

예를 들어

$ ls > ls.log

출력을 반환하지 않는 명령에는 자세한 정보를 사용하세요.

$ mv -v foo bar > mv.log

, 함수 또는 PHP 자체 함수를 사용하여 동일한 작업을 수행 php-scripts할 수 있기 때문입니다 .echo>system

관련 정보