답변:
이것은 당신이 문제에 접근하는 방법이 아닙니다. 사용자에게 쉘 액세스 권한을 부여하면 해당 사용자에게 적절한 권한이있는 모든 작업을 수행하도록 위임합니다. 명령 로깅을 잊어 버렸습니다. 유닉스 시스템에서 명령을 실행하는 방법이 너무 많습니다.
예를 들어, 사용자는 메일 클라이언트를 시작할 수 있으며 (예를 들어, 로그 된 유일한 명령은 pine
) VI를 시작하는 "Compose"를 선택하고 VI에서 원하는 명령을 실행합니다 :!cmd
. 이 명령은 어디에도 기록되지 않으며 시스템의 관점에서 grep 또는 sort와 같이 VI가 호출하는 도우미 응용 프로그램과 같습니다. 쉘이 기록한 유일한 명령은 pine
입니다.
실제로 원하는 것을 감사 라고 합니다. 감사 서브 시스템을 활성화하고 사용 auditctl
명령 및 auditd
으로부터 데몬을 감사 기록됩니다을 제어하는 패키지. 자세한 내용은 auditctl (8) 매뉴얼 페이지에 있습니다.
모든 프로세스 인스턴스화를 로깅하면 최적이 아닐 수도 있습니다. 예를 들어, ./configure
autotools를 사용하여 작성된 소프트웨어 패키지 의 단순성 은 수천 개의 프로세스 인스턴스화를 작성하는 데 주목할 만합니다. 이렇게하면 감사 로그에 너무 많은 노이즈가 발생하여 나중에 분석하기가 매우 어려워집니다.
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
자세한 내용은.
약간의 C 프로그래밍을 원한다면 execve를 감싸고 syslog에 로그 한 다음 dlopen은 실제 execve syscall을 포함하는 라이브러리를 작성하여이를 수행 할 수 있습니다. 그런 다음 / etc / environment에서 LD_PRELOAD를 작성한 라이브러리의 경로로 설정하십시오.
여기에 루프를 입력하는 데주의를 기울여야하므로 특정 바이너리의 exec 만 기록하거나 syslog와 같은 다른 로그는 기록하지 않을 수 있습니다.
사용자가 sudo (또는 이와 유사한)를 사용하여 원하는 명령을 실행하고 일정 수준의 사용자를 신뢰하는 것이 좋습니다. "완전히 통제"하는 것에 가까워 질수록 그들이하는 일을 추적하기가 더 어려워집니다. 예를 들어 최근에 이와 같은 도구를 살펴 보았습니다. 대부분 사용자와 머신이 충분한 경우 관리하기 어려운 로그 만 생성합니다. :)
생성 할 모든 정보를 고려하십시오. 그 중 얼마나 관심이 있습니까? 아마도 매우 적을 것이므로 대부분 쓸모없는 로그를 생성합니다. 다른 사람들이 제안한 것처럼 실제로 관심있는 사항을 감사하면 아마도 더 나은 최종 상태가 될 것입니다.
세션 로깅을 수행하는 sudosh ( http://sudosh.sourceforge.net ) 도 있습니다. 사용자를 위해 정의 된 쉘로 또는 sudo를 통해이를 실행하는 옵션이 있습니다. 각 세션의 타이밍도 추적하므로 세션을 재생하고 볼 수 있습니다 (세션 편집 및 기타 사항 포함).