기록 항목에 네트워크 또는 사용자 소스 연결 데이터를 추가하려면 어떻게 해야 합니까?

기록 항목에 네트워크 또는 사용자 소스 연결 데이터를 추가하려면 어떻게 해야 합니까?

내가 관리하는 시스템의 모든 사용자에 대한 기록 설정을 수정하고 싶습니다. 다음과 같은 연결 터미널의 정보를 포함하고 싶습니다.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=100000history보존 기간을 연장합니다.

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

원한다면 일반적으로 일반적인 기록 파일로 읽을 수 있습니다.

관련 정보