답변:
BASH 쉘의 경우 시스템 전체 BASH 런타임 구성 파일을 편집하십시오.
sudo -e /etc/bash.bashrc
해당 파일의 끝에 추가하십시오.
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
새 파일로 "local6"에 대한 로깅을 설정하십시오.
sudo -e /etc/rsyslog.d/bash.conf
그리고 내용은 ...
local6.* /var/log/commands.log
rsyslog를 다시 시작하십시오.
sudo service rsyslog restart
로그 아웃. 로그인하십시오.
그러나 로그 회전을 잊었습니다.
sudo -e /etc/logrotate.d/rsyslog
같은 방식으로 회전 할 로그 파일 목록이 있습니다 ...
/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message
따라서 새 bash-commands 로그 파일을 해당 목록에 추가하십시오.
/var/log/commands.log
구하다.
PROMPT_COMMAND
bash가 아닌 쉘로 간단히 재설정하거나 설정을 해제 하거나 실행 하여 사용자가 쉽게 비활성화 할 수 있다고 생각합니다 .
이와 관련하여 프로세스 계정 시스템, 특히 lastcomm 및 ac 명령을 제공하는 acct 패키지가 도움이 될 수 있습니다 .
ac 명령은 사용자의 연결 시간에 대한 통계를 시간 단위로 인쇄합니다. 이것은 사용자가 SSH 또는 직렬 터미널을 통해 원격으로 또는 콘솔에서 시스템에 연결 한 시간입니다.
lastcomm 명령은 이전에 실행 된 명령에 대한 정보를 표시합니다. 가장 최근 항목이 목록 맨 위에 표시됩니다. 각 프로세스가 사용한 총 CPU 시간도 표시됩니다.
도움이 될 수있는 오래된 튜토리얼은 다음과 같습니다.
http://www.linuxjournal.com/article/6144?page=0,1
이 자습서에서 last 등과 같은 다른 계정 명령을 찾을 수 있습니다.
http://www.techrepublic.com/article/system-accounting-in-linux/1053377
snoopy를 사용할 수 있습니다 .
스누피 로거는 당신의 목적에 잘 맞을 것입니다. 피할 수없는 로깅 솔루션이 아니라, 자신의 작업을 추적하는 것을 선호하는 부지런한 관리자에게 유용한 도구입니다.
공개 : 나는 스누피 관리자입니다.
당신은 찾을 수 있습니다 여기에 모든 로그인하는 스크립트 bash는 텍스트 파일이나에 명령 / 빌트인 시스템 로그 패치 또는 특별한 실행 도구를 사용하지 않고 서버를.
bash 초기화시 한 번만 호출해야하는 간단한 셸 스크립트이므로 배포가 매우 쉽습니다 .
무료이며 귀하의 요구에 부합하기를 바랍니다.
이것을 시도하십시오 (위의 솔루션은 bash 4.3에서 100 % 작동하지 않습니다).
export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'
이것은 로깅을 수행하며 bash 히스토리 파일에 사용되는 타임 스탬프의 로깅을 방지합니다. bash는 strg + c를 여러 번 누른 후 bash 4.3으로 테스트 한 후 "subjob"에 신호를 보내므로 트랩이 필요합니다. 이것은 현재 사용자의 로그 아웃을 강제합니다 (예 : sudo로 로그인)