
현재 Debian Wheezy 서버에 루트 SSH 세션이 있고 다른 사용자가 현재 (권한 없는 계정으로) 로그인되어 있는 것을 볼 수 있습니다. 사용자가 여전히 로그인되어 있기 때문에 history
기록이 플러시되지 않았고 파일 ~/.bash_history
이 최신 상태가 아니기 때문에(아직 메모리에 있음) 명령이 올바른 내용을 표시하지 않습니다.
사용자가 아직 로그인되어 있는 동안 세션 중에 수행한 작업을 확인하기 위해 메모리를 덤프하려면 어떻게 해야 합니까?
답변1
다음은 기록을 덤프하는 작은 스크립트입니다. 다른 프로세스의 메모리 공간을 몰래 숨기려면 루트 권한이 필요합니다.
#!/bin/bash
if [ $# -eq 0 ]; then
echo "usage: $0 <bash_pid>"
exit 1
fi
gdb -batch \
--eval "set sysroot /" \
--eval "attach $1" \
--eval "call write_history(\"/tmp/bash_history-$1.txt\")" \
--eval 'detach' \
--eval 'q'
exit 0
ps '경고: 공유 라이브러리 기호를 로드할 수 없습니다...'와 같은 오류가 다른 몇 가지 오류 표시 줄과 함께 발생할 수 있습니다. 스크립트가 작동하지 않는다고 확신하기 전에 /tmp/에서 기록 파일을 찾아보십시오.
답변2
bash_history는 항상 저장되지 않거나 덮어쓸 수 없기 때문에 실제로 신뢰할 수 없습니다. 또한 일반적으로 다중 세션 사용 중에 모든 것이 저장되는 것은 아닙니다(물론 구성에 따라 다름).
acct
그러한 데이터를 추적해야 한다면 다음 과 같은 유용한 도구를 설정해 보겠습니다 .
ac
명령은 사용자 로그인/로그아웃(연결 시간) 통계를 시간 단위로 인쇄합니다.lastcomm
command는 사용자가 이전에 실행한 명령의 정보를 출력합니다.accton
명령은 회계 프로세스를 켜거나 끄는 데 사용됩니다.sa
command는 이전에 실행된 명령의 정보를 요약합니다.last
및lastb
명령은 마지막으로 로그인한 사용자 목록을 표시합니다.
설치하기 위해서:
apt-get install acct
그런 다음 서비스를 활성화해야 합니다.
service pcacct start