모든 사용자가 제출 한 모든 UNIX 셸 명령을 어떻게 기록합니까?


8

머신의 모든 쉘에 제출 된 모든 명령을 기록하는 우아한 방법이 있습니까? 이것은 드물게 사용되는 우분투 서버의 맥락에서 내가 유일한 인간 사용자입니다. (자동 시스템에서 사용되는 여러 사용자 계정이 있습니다.)

나는 이것을 눈에 띄지 않고 오버 헤드로 만들고 싶습니다 script. 따라서 간단한 방법이 있으면 좋을 것 입니다.

답변:


9

새벽부터 (실제로 사람들이 사용한 컴퓨터주기 당 실제 돈을 지불 한 시점부터 거슬러 올라간 이후) 유닉스와 복제본에는 프로세스 회계 ( acct) 라는 시스템 이 내장되어 있습니다.이를 통해 시스템 관리자는 정확하게 알 수있었습니다 사용자가 수행 한 작업에 따라 요금을 청구 할 수 있습니다.

acct시설은 오늘날까지 대부분의 유닉스와 리눅스 시스템에 여전히 존재합니다.

이 사이트 : http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html에서 이를 활성화하는 방법을 알려줍니다.


이것은 sudo와 su를 수행하는 사용자와 그 이후의 root 명령 중 어떤 것을 기록하는 데 사용될 수 있습니까?
Daniel Beck

사용자, tty 등이 입력 한 모든 명령 실행을 기록한다고 생각합니다 . tty의 명령을 해당 tty에 로그인 한 사용자와 일치 시켜서 어떤 사용자가 sudod 또는 sudo'd했는지 추적 할 수 있습니다.
Majenko

감사합니다.이 기능을 전혀 몰랐습니다. 매뉴얼 페이지를 빠르게 읽으면 디스크 공간이 부족한 조건에 도달 할 때까지 로깅이 계속된다는 의미이므로 로그 스크립트가 필요할 수 있습니다.
jl6

프로세스 회계가 모든 인수가있는 명령이 아니라 실행 된 프로그램을 기록했다고 생각했습니다.
Sirex

2

다음은 모든 쉘 명령을 기록 하는 매우 훌륭하고 빠른 방법입니다 .

1 단계:

자주 사용하는 텍스트 편집기를 사용하여 / etc / bashrc를 열고 끝에 다음 줄을 추가하십시오.

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

2 단계:

/etc/syslog.conf 파일에 다음 줄을 추가하여 syslogger가 local6을 로그 파일에 트랩하도록 설정하십시오.

local6.*                /var/log/cmdlog.log

[전체 블로그 게시물보기]


사용자가 변수를 재설정 하여이 기능을 비활성화 할 수 있음을 경고하고 변수가 "각 기본 프롬프트를 실행하기 전에" 실행 되므로이 사실은 기록되지 않습니다.
dmckee --- 전 운영자 고양이

2

snoopy를 사용할 수 있습니다 .

설치 및 제거가 매우 간단합니다 (커널 모듈 또는 패치 필요 없음). 이 솔루션은 적절한 감사 솔루션이 아니며 쉽게 우회 할 수 있습니다.

공개 : 저는 현재 스누피 관리자입니다.


보스 티안 Skufca 또한 우분투에서 스누피를 설치하기위한 추가 지침을 제공하고 여기에 동일한 스레드에서 추가 의견 및도 여기 .
karel

스누피의 경우 +1; /var/log/auth.log에 멋진 명령 및 인수 로그를 제공합니다.
David Goodwin

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