리눅스 Shell 명령어 로그가 남지 않는 문제 해결하기

티스토리 블로그를 직접 구축한 리눅스의 워드프레스로 이사한 뒤 안정화와 백업 등 관리적인 부분에 신경이 집중되어 있어 인지하지 못했었는데 블로그를 구축하여 운영하고 있는 웹서버와 DB서버 2대에 이유는 알 수 없지만 Shell History가 남지 않고 있었다.

Shell History 란?

쉘 히스토리(Shell History)란 리눅스와 유닉스 운영체제의 쉘 프롬프트 상에서 실행한 명령어를 로그 파일에 기록하여 사후에 어떤 명령어들을 사용했는지 알 수 있도록 지원해주는 기능을 의미한다. 보안관점에서는 책임추적성을 확보하기 위한 수단이기도 하다.

Bash 에서 Shell History가 기록되지 않을 때 점검할 항목

기억하기론 리눅스를 설치하면 Shell History가 기본적으로 남도록 되어있다. 특히 리눅스의 기본 Shell인 bash(본 어게인 쉘)의 경우에는 더욱 그러하다. 하지만 확인한 결과 내 블로그가 구축되어 있는 우분투 22.04의 taeho라는 계정은 쉘이 bash가 아니라 sh 였다. 그리고 /bin/sh는 /bin/bash가 아닌 /bin/dash라는 bash의 경량형 shell 파일의 심볼릭링크였다. 그래서 shell을 /bin/sh에서 /bin/bash로 변경했다.

리눅스에서 사용자 계정의 쉘은 다음과 같은 명령어로 확인할 수 있다.

cat /etc/passwd | grep taeho

① 의 /bin/bash가 바로 taeho 계정이 로그인할 때 실행되도록 지정된 대화형 쉘이다. 이 쉘이 /bin/sh 와 같이 다른 쉘로 지정되어 있다면 기본적올 Shell History가 동작되지 않는다.

그리고 ②에 지정된 /home/taeho 가 계정의 홈디렉토리인데… 이 홈디렉토리에 .bash_history 라는 로그 파일이 다음과 같이 생성되어 있어야 한다.

이 .bash_history 파일은 리눅스의 /etc/passwd 파일에 생성된 사용자 계정의 홈디렉토리에 존재해야 하며 이 파일이 없으면 Shell History가 기록되지 않는다. 없을 경우 자동으로 만들어주도록 하면 좋겠지만 그렇지 않다.


이 파일이 없을 경우 수동으로 생성해줘야 하는데, 두 가지를 조심해야 한다. 소유자와 퍼미션이다. 반드시 사용자의 계정이 소유자로 되어 있어야 하며 퍼미션은 반드시 600 즉 -rw——- 로 되어 있어야 한다. 퍼미션이 다르거나 소유자가 다르면 기록되지 않는다.

만약 .bash_history 파일이 없다면 해당 사용자의 계정으로 로그인하거나 su – 계정명 명령으로 Switch User한 다음 계정의 홈디렉토리로 이동한 다음, 다음의 명령어를 사용해 생성해주면 된다.

touch .bash_history
chmod 600 .bash_history

검색을 통해 다른 자료들을 확인해보면 .profile이나 .bashrc 또는 .bash_profile 등에서 HISTFILE 환경변수가 올바른지 확인하라는 내용이 있는데, 기본적으로 이런 환경변수가 설정되어 있지 않아도 Bash에서는 Shell History가 기록되도록 되어 있다.

이런 환경변수를 지정해야 하는 경우는 Bash의 기본설정이 아닌 커스터마이즈한 환경을 구축할 대 기본설정을 오버라이딩 하기위해 지원되는 환경변수다.

즉 Bash을 사용하도록 /etc/passwd 설정에서 지정된 경우 계정의 홈 디렉토리에 .bash_history 파일이 존재하고 퍼미션이 600이라면 무조건 실행한 명령어의 이력이 기록된다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다