여러가지 보안 설정들이 있겠지만 이런 보안설정들의 흐름과 공격과 방어 패턴을 확인하기 위해서 로그를 확인하는 것은 매우 중요합니다.
오늘은 명령어 로그를 남겨보려고 합니다. 명령어 로그는 hisotry 라는 명령어로 확인할 수 있습니다. history 명령어도 깊게 파고 들어가면 신기한게 많은데요. 간단하게 예를 들자면 history list 와 HISTFILE 이 달라 저장되는 명령어 로그의 차이가 있다든가 하는 식으로요. 다음에 제대로 정리해서 올리도록 하겠습니다.
여기서 가장 최근의 history 로그를 가져와 로그를 남기는 것을 해보겠습니다. 솔직히 이렇게만 보면 어떤게 언제 입력됐고 누가 입력했는지 알기 어렵잖아요.
두가지 방법이 있는데 모두 소개 해드리겠습니다.
1. rsyslog.d 에서 선언하기
$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )
기본적으로 로직은 비슷합니다. 위의 명령어를 통해서 history 를 불러오게 됩니다. 위 정규표현식의 내용은
[ ] 공백과 매치된다 - * 0번 이상 반복되는 [0-9] 숫자와 매치된다 \+ (이건 잘 모르겠네요 정규표현식 공부가 조금 미흡합니다.) 암튼 여기까지만 말해도 아실거 같은데 hisotry 로그가 위의 사진처럼 앞에 숫자 날짜 공백을 포함하고 있습니다. 이를 모두 지워주는 정규표현식입니다.
내가 해줄 것
1. SSH 로 원격 접속한 IP 를 알아내자
2. 어느 명령어를 어디에서 입력했는지 알아내자
제가 해주고 싶은것은 보안을 위해 SSH 로 원격 접속한 사용자의 COMMAND 로그 입니다. SSH 로 접속한 IP 를 불러오는 방법은 여러가직 있는데 $SSH_CONNECTION 또는 netstat -tnpa | grep sshd 입니다.
최대한 간단하게 코드를 짜고 싶어서 따로 파싱해주지 않아도 읽기 편한 ssh_connection 을 사용하겠습니다.
홈 디렉토리의 .bashrc 파일로 들어가서 추가해줍니다. 포맷 형식은 따로 쓰고 싶으신대로 적어주시면 됩니다.
vi /etc/rsyslog.d/bash.conf
로 들어가서 자신이 로그를 저장하고 싶은 디렉토리를 입력해주면 됩니다. logger 라는 친구가 log 를 남기겠다고 전해주는 친구고요. local6 는 제 기억으로 logger 명령어가 로컬에서 작동할 수 있게 해주고 local0~7 까지 마음대로 사용할 수 있는 비어있는 필드로 알고 있습니다.
시간 ip 입력한 위치 입력한 명령어가 로그로 남게 됩니다.
2. rsyslog.conf 에 선언하기
vi /etc/profile.d/history_log.sh
#!/bin/bash
function history_to_syslog
{
declare command
command=$(history 1 | sed 's/^[ ]*[0-9]\+[ ]*//')
if [ "$command" != *"tail"* ]; then
if [ "$command" != "$old_command" ]; then
logger -p local6.debug -- IP-`hostname -I` PID-$$ PWD-$PWD TTY-`tty` COMMAND-\'$command\'
fi
old_command=$command
fi
}
trap history_to_syslog DEBUG || EXIT
echo "local6.debug /var/log/command_log" >> /etc/rsyslog.conf
systemctl restart rsyslog
source /etc/profile.d/history_log.sh
방식은 똑같은데 조금 더 길어진 쉘 방식입니다. 1번 방법은 쉘에서 실행되는 것이라 특정 유저의 쉘에서만 로그가 남기 때문에 2번 방식으로 설정해주셔야합니다.
'네트워크 > 서버보안' 카테고리의 다른 글
ftp 상위디렉토리 접근 보안 (0) | 2023.01.03 |
---|---|
cron , crontab (0) | 2022.11.09 |
RSA 인증서를 이용한 대칭키 통신 (0) | 2022.02.15 |
우분투 NAT 및 정적 라우팅 (0) | 2022.02.09 |
SSH 특정 그룹별 접속 허가 및 차단 (0) | 2022.02.08 |