모든 리눅스 명령을 로그 서버에 기록하는 방법


13

입력 된 모든 단일 명령이 로그 서버로 이동하기를 원합니다. 모든 로그를 로그 서버로 보내도록 syslog-ng가 이미 구성되어 있습니다.

이 작업을 수행하는 모든 방법에 관심이 있습니다. 불량 사용자 및 보안에 대한 논의가 필요하지만 첫 번째 주요 목표는 단순히 세션을 로그에 기록하는 것입니다. 모든 세션은 ssh를 사용하지만 콘솔 연결 명령도 기록해야합니다. 모든 쉘 에서이 작업을 수행하고 싶지만 기본 쉘은 bash입니다. (또, 불량 사용자가 자신의 쉘을 만들 수 있다는 것을 알고 있습니다 ...)

답변:


29

이것은 당신이 문제에 접근하는 방법이 아닙니다. 사용자에게 쉘 액세스 권한을 부여하면 해당 사용자에게 적절한 권한이있는 모든 작업을 수행하도록 위임합니다. 명령 로깅을 잊어 버렸습니다. 유닉스 시스템에서 명령을 실행하는 방법이 너무 많습니다.

예를 들어, 사용자는 메일 클라이언트를 시작할 수 있으며 (예를 들어, 로그 된 유일한 명령은 pine) VI를 시작하는 "Compose"를 선택하고 VI에서 원하는 명령을 실행합니다 :!cmd. 이 명령은 어디에도 기록되지 않으며 시스템의 관점에서 grep 또는 sort와 같이 VI가 호출하는 도우미 응용 프로그램과 같습니다. 쉘이 기록한 유일한 명령은 pine입니다.

실제로 원하는 것을 감사 라고 합니다. 감사 서브 시스템을 활성화하고 사용 auditctl명령 및 auditd으로부터 데몬을 감사 기록됩니다을 제어하는 패키지. 자세한 내용은 auditctl (8) 매뉴얼 페이지에 있습니다.

모든 프로세스 인스턴스화를 로깅하면 최적이 아닐 수도 있습니다. 예를 들어, ./configureautotools를 사용하여 작성된 소프트웨어 패키지 의 단순성 은 수천 개의 프로세스 인스턴스화를 작성하는 데 주목할 만합니다. 이렇게하면 감사 로그에 너무 많은 노이즈가 발생하여 나중에 분석하기가 매우 어려워집니다.


13

acct패키지를 설치하고 (패키지 이름은 배포에 따라 다르며 프로세스 계정이라고도 함) 다음을 사용하십시오 lastcomm <username>.

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

tty 또는 명령 이름으로 검색 할 수도 있습니다. 평소와 같이 man lastcomm자세한 내용은.


11

약간의 C 프로그래밍을 원한다면 execve를 감싸고 syslog에 로그 한 다음 dlopen은 실제 execve syscall을 포함하는 라이브러리를 작성하여이를 수행 할 수 있습니다. 그런 다음 / etc / environment에서 LD_PRELOAD를 작성한 라이브러리의 경로로 설정하십시오.

여기에 루프를 입력하는 데주의를 기울여야하므로 특정 바이너리의 exec 만 기록하거나 syslog와 같은 다른 로그는 기록하지 않을 수 있습니다.


실제로 이것은 매우 도움이됩니다. execve 래퍼에 대한 첫 번째 검색은 스누피 ( sourceforge.net/projects/snoopylogger )를 불러옵니다 . 조금 장황하지만 내가 찾고있는 것에 가깝습니다. 테스트 후 프로덕션 환경에 배치하려면 관리 승인이 필요하다는 것을 알았습니다. (모든 사악한 유형에 경고)
레오

@Leo 버전 2.0.0 이후 Snoopy는 ./configure를 수행 할 때 커스텀 로그 형식 지정을 지원하므로 과장된 표현은 더 이상 문제가되지 않습니다. 공개 : 스누피 관리자.
Bostjan Skufca

7

rootsh ( man page ) 와 같은 것을 찾고있는 것처럼 들립니다 . 매뉴얼 페이지를 인용하려면 :

Rootsh는 모든 에코 키 스트로크 및 터미널 출력을 파일 및 / 또는 syslog에 기록하는 쉘용 래퍼입니다.

이름에도 불구하고 모든 사용자가 사용할 수 있습니다.


2

사용자가 sudo (또는 이와 유사한)를 사용하여 원하는 명령을 실행하고 일정 수준의 사용자를 신뢰하는 것이 좋습니다. "완전히 통제"하는 것에 가까워 질수록 그들이하는 일을 추적하기가 더 어려워집니다. 예를 들어 최근에 이와 같은 도구를 살펴 보았습니다. 대부분 사용자와 머신이 충분한 경우 관리하기 어려운 로그 만 생성합니다. :)

생성 할 모든 정보를 고려하십시오. 그 중 얼마나 관심이 있습니까? 아마도 매우 적을 것이므로 대부분 쓸모없는 로그를 생성합니다. 다른 사람들이 제안한 것처럼 실제로 관심있는 사항을 감사하면 아마도 더 나은 최종 상태가 될 것입니다.


1

Bash는 4.1 이후 syslog 지원으로 컴파일 할 수 있습니다.

완벽하지는 않지만 (프로세스 계정이 더 좋을 수도 있지만) 대부분 사용자와의 상호 작용입니다. 볼륨을보다 잘 관리 할 수 ​​있어야하며 비정상적인 것으로 의심되는 경우 더 자세한 것으로 전환 할 수 있습니다.

즉, 이것은 방해가되며 사용자가 시작하기 전에 매우 구체적인 개인 정보 경고를 기대합니다.


0

세션 로깅을 수행하는 sudosh ( http://sudosh.sourceforge.net ) 도 있습니다. 사용자를 위해 정의 된 쉘로 또는 sudo를 통해이를 실행하는 옵션이 있습니다. 각 세션의 타이밍도 추적하므로 세션을 재생하고 볼 수 있습니다 (세션 편집 및 기타 사항 포함).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.