Pentest Playbook

Bash History Manage Setting

모의해킹 및 침투 테스트 점검을 수행할 때, Terminal을 사용할 경우 History 관리

1. history 설정

기본적으로 history는 날짜와 라인 번호를 출력하지 않고 입력한 명령어만 출력한다.

vi ./bashrc #bash 설정 값 수정
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " #Timestamp 저장 활성화
source .bashrc #변경 값 적용

history
#저장결과
#...
#1958  2026-01-07 09:16:57 exit
#1959  2026-01-07 09:16:58 history
#...

2. .bash_history 설정

입력한 명령어는 바로 적용되는게 아닌, Shell이 종료될 때 저장되기 때문에 바로 기록되지 않음

shopt -s histappend #입력 명령어 즉시 저장 활성화

#여러 개의 터미널을 동시에 쓸 경우, 세션 공유
PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

#여러 개의 터미널을 동시에 쓰는게 아닌 경우, 아래와 같이 설정
PROMPT_COMMAND="history -a;"

#history -a : 현재 세션 명령어를 파일에 Append
#history -c : 메모리 히스토리 클리어
#history -r : 파일에서 다시 읽어오기

설정 결과 명령어를 입력하면 실시간으로 적용

  1. 모든 입출력 결과를 저장할 경우, script 명령어 사용

3. History 전체 적용 코드

3.1. bash (wsl)

#!/bin/bash
#settings_shell.sh
sed -i 's/\r$//' "$0" 2>/dev/null
cat >> ~/.bashrc << 'EOF'

# === History Settings ===
shopt -s histappend
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export HISTSIZE=10000
export HISTFILESIZE=20000

prompt_cmd() {
    history -a
    history -c
    history -r
    echo "$(history 1 | sed 's/^[ ]*[0-9]*[ ]*//')" >> ~/.bash_history_readable
}

PROMPT_COMMAND="prompt_cmd"
EOF

source ~/.bashrc
echo "History 설정 완료"
- Additional Options
export HISTSIZE={size} #History에 저장할 크기 별도 지정(기본 1000줄)
export HISTFILESIZE={size}
export HISTCONTROL=ignoredups:ignorespace #중복 명령어 저장 안함 설정

3.2. zsh

#!/bin/zsh
#settings_shell.sh
sed -i 's/\r$//' "$0" 2>/dev/null

cat >> ~/.zshrc << 'EOF'

# === History Settings ===
setopt APPEND_HISTORY
setopt INC_APPEND_HISTORY
setopt EXTENDED_HISTORY
setopt HIST_IGNORE_DUPS
setopt SHARE_HISTORY

export HISTSIZE=10000
export SAVEHIST=20000
export HISTFILE=~/.zsh_history

precmd() {
    local last_num last_time last_cmd
    last_num=$(fc -l -1 | awk '{print $1}')
    last_time=$(TZ=Asia/Seoul date '+%Y-%m-%d %H:%M:%S')
    last_cmd=$(fc -ln -1)
    echo "$last_num  $last_time $last_cmd" >> ~/.zsh_history_readable
}

EOF

source ~/.zshrc
echo "History 설정 완료"

Trouble Shooting

  1. CRLF 오류가 발생할 경우 - 아래 명령어 실행 후에 재실행
    sed -i 's/\r$//' {filename}.sh
    
ESC

💡 검색 팁

  • #T1572 - 태그로 검색
  • persistence - 키워드로 검색