내가 관리하는 시스템의 모든 사용자에 대한 기록 설정을 수정하고 싶습니다. 연결된 터미널의 정보를 포함하고 싶습니다.who
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
현재 다음과 같은 방법으로 내 기록을 수정합니다. 저는 이러한 설정 중 많은 부분이 여기에서 여러 번 다루어졌다는 것을 알고 있습니다. 그러나 나는 "Juliet Kemp의 Linux 시스템 관리 요리책" 아주 아주 오래전에.
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
여러 터미널을 열었을 때 정보가 손실될 수 있는 문제를 수정했습니다.
PROMPT_COMMAND='history -n;history -a'
여러 터미널에 걸쳐 실시간으로 기록을 추가하는 확장입니다.
HISTSIZE=100000
HISTFILESIZE=100000
history
보존 기간 연장
HISTTIMEFORMAT="%m/%d/%y %T
"기록의 각 줄에 타임스탬프를 찍습니다.
당신이 보통 얻는 것 history
835 ls
836 cd ..
내 수정된 현재 history
결과
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
history
보답으로 보고 싶은 것에서
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
이름 만 보고 DNS
'결혼' 한 건 아니었어요. who
어떤 종류의 조회나 쿼리도 수행하지 않고도 다른 곳에서 가져오길 원합니다 . IP 주소에 만족하겠습니다.
002 03/26/12 05:11:30 192.168.0.2 ll
왜? 동일한 그룹의 여러 사용자가 사용자 ID를 공유하여 일상적인 작업을 수행하는 여러 시스템을 관리합니다. 이를 통해 조직 내 실제 위치와 실제 사용자를 역사적으로 수행한 작업과 연관시킬 수 있습니다.
나는 이것이 최적이 아니라는 것을 알고 그것을 바꾸고 싶지만 유람선 크기의 선박에 있을 때는 급회전을 시도하지 않습니다. (참고: 이렇게 하면 승객이 당신을 배 밖으로 던질 것입니다.)
어쨌든 더 나은 솔루션으로 마이그레이션할 수 있을 때까지 이 추적 기능을 갖고 싶습니다.
또한, history
제가 현재 수정하기 위해 사용하고 있는 것에 대한 제안 사항이 있으시면 듣고 싶습니다.
감사해요,
편집: 1
나는 다른 프로그램을 실행하고 싶지 않으며 "이유에 따라" 추가 구성을 하고 싶지 않습니다.
오버헤드를 추가하고 싶습니다 0
. 추가해야 한다면 크기가 작아야 합니다.
나는 내 사용자를 신뢰하며, (무슨 일이 발생하면) 10명의 사용자 중 동일한 사용자 이름:비밀번호로 시스템에 로그인한 사용자가 누구인지 확인하고 싶습니다. 또는 사용자가 아닐 수도 있고 cron
특정 작업을 수행하기 위해 연결을 수행하는 사용자로서 시스템에서 잊혀질 수도 있습니다. 또는 예를 들어 애플리케이션을 사용하면 작업을 BMC Control-M
연결 ssh
하고 실행할 수 있습니다. "나쁜 사용자"를 찾는 것이 아니라 최소한의 노력으로 추적할 수 있는 것이 중요합니다.
편집 2:
시스템은 SLES 및 RHEL을 실행합니다.
답변1
Llua의 제안을 바탕으로 역사에 대해 더 많이 공부할 수 있습니다. 시스템 전체 BASH RC 파일(예: /etc/bash.bashrc)에 한 줄을 추가합니다.
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
시스템 로거에서 "local6"에 대한 로깅을 설정합니다. 어쩌면 다음과 같은 것일 수도 있습니다.
local6.* /var/log/commands.log
시스템 로거를 다시 시작합니다. 로그 파일 회전을 설정할 수도 있습니다. 로그아웃; 로그인하면 이제 기록이 다음 형식으로 /var/log/commands.log에 기록됩니다.
날짜/시간 호스트 이름 로거: 사용자 이름 [audit_pid]: 명령 [return_val]
이는 취향에 따라 추가로 조정할 수 있습니다.
답변2
다음 단락은 일반적으로 아이디어를 설명하고 어떤 측면에서는 구식이지만 최신 버전을 사용할 수 있습니다.이것페이지. 대용량 파일 ~/.bash_history.archive(HISTFILE=~/.bash_history와 별개)를 사용하겠습니다. 그런 다음 각 bash 세션이 종료될 때 새 기록 줄을 추가합니다.
이 접근 방식의 첫 번째 문제점은 종료할 때마다 bash가 이 스크립트를 호출하도록 하려면 어떻게 해야 합니까? 물론 "exit"를 입력하여 종료하면 "exit" 기능의 별칭을 지정할 수 있지만 단축키 Ctrl-D를 사용하여 이를 수행하고 이를 다른 항목에 다시 할당하는 방법을 찾을 수 없습니다. -기능을 종료하는 중입니다.
따라서 첫 번째 시도는 다음과 같습니다. Ctrl-D를 비활성화합니다.
export IGNOREEOF=10
그리고 종료 기능을 호출하려면 이중 Ctrl-X 조합을 정의하십시오.
그러나 올바른 방법은 bash의 종료 트랩을 사용하는 것입니다. 이는 bash를 종료하는 방법에 관계없이 호출되기 때문에 완벽한 솔루션입니다. Ctrl-D, 종료, xterm 창 닫기.
trap 'archive_history' EXIT
다음 단계는 bash_history에서 시작 줄을 정의하여 새 줄만 저장하고 해당 줄이 기록 파일에 추가되도록 하는 것입니다.
export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`
shopt -s cmdhist histappend
이것이 bash 시작 시 필요한 것입니다. 이제 우리는 현재(새) 기록이 어느 기록 줄에서 시작되는지 알 수 있습니다. 기록을 저장하려면 ~/.bashrc에 다음 섹션을 추가하세요.
archive_history()
{
HISTORYOLD=${HISTFILE}.archive
CURTIME=`date`
CURTTY=`tty`
if [ x$HISTDUMPPED = x ]; then
echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >> $HISTORYOLD
history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g' >> $HISTORYOLD
export HISTDUMPPED=1
fi
}
exit ()
{
archive_history
builtin exit
}
~/.inputrc 파일에는 Ctrl-x x 종료 단축키를 재정의하는 다음 줄이 포함되어야 합니다. 처음 시도할 때 이 방법이 좋지 않은 지름길이라고 생각할 수도 있지만 나중에는 익숙해질 것입니다. 저를 믿으세요.
$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"
$endif
또한 bash 세션이 로그인 세션이고 logout
' '를 호출하여 종료하면 다음 줄을~/.bash_logout
archive_history
~/.bash_history.archive
언급된 모든 작업을 완료한 후 다음 섹션이 포함된 파일을 찾을 수 있습니다.
#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----
exit
cd progr/letters/resume/
e resume.tex
원한다면 일반적으로 일반 기록 파일처럼 읽을 수 있습니다.