내가 관리하는 시스템의 모든 사용자에 대한 기록 설정을 수정하고 싶습니다. 다음과 같은 연결 터미널의 정보를 포함하고 싶습니다.who
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
나는 현재 다음과 같은 방법으로 내 기록을 수정합니다. 나는 이러한 설정 중 많은 부분이 여기에서 여러 번 다루어졌다는 것을 알고 있습니다. 하지만 저는 이 코드를 'Linux 시스템 관리 레시피 작성자: Juliet Kemp" 오래전.
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를 사용하고 내장된 종료 기능이 아닌 무언가에 다시 할당하는 방법을 찾을 수 없습니다.
그래서 첫 번째 시도는 다음과 같습니다.
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
원한다면 일반적으로 일반적인 기록 파일로 읽을 수 있습니다.