본문 바로가기
Operating System/Linux & Unix

[LINUX] 원격 접속자의 명령어(shell command) 로그 남기기

by 이미존재 2022. 10. 25.
반응형

■원격 접속자의 명령어 로그 남기기(SYSLOG 기능으로 로그 남기기)


1.  Ubuntu 


1) 로그인 전체 적용(/etc/profile)
  - 개별 계정에 설정시 :  ~/.bashrc 파일

root@berasix:~# vi /etc/profile
....

# Setup history

export CONN_IP=`who am i |cut -f 2 -d \(|cut -f 1 -d \)`

function logging
{
    stat="$?"
    cmd=$(history|tail -1)
    if [ "$cmd" != "$cmd_old" ]; then
       logger -p local1.debug "[1] PID=$$, PWD=$PWD, ID=$LOGNAME, IP=$CONN_IP, CMD=$cmd"
    fi
    cmd_old=$cmd
}
trap logging DEBUG

 


2) syslog에 적용 하기

root@berasix:~# vi /etc/rsyslog.d/50-default.conf

## 아래 내용 추가. log level에 따라 기록되는 로그 내용이 달라집니다. ###
local1.debug                    /var/log/cmd.log


3) 로그 rotate 시키기

root@berasix:~# vi /etc/logrotate.d/rsyslog

## 아래 내용 추가 ###
/var/log/cmd.log


4) syslog 재기동
systemctl restart rsyslog.service

5) log 확인
 - 입력한 명령어와 해당 사용자 등이 cmd.log 파일에 기록됩니다. 
 - 해당 로그는 shell상에서 입력한 로그만 기록되며 프로그램 내에서 수행한 내용(예: vi 등)은 기록되지 않습니다.

[우측 명령어를 입력한 내용이 왼쪽화면의 cmd.log 파일에 실시간 기록된다]

 

2.  RHEL(Redhat Enterprise Linux) & CentOS

1) 로그인 전체 적용(/etc/profile)
  - 개별 계정에 설정시 :  ~/.bashrc 파일

root@berasix:~# vi /etc/profile
....

# Setup history

export CONN_IP=`who am i |cut -f 2 -d \(|cut -f 1 -d \)`

function logging
{
    stat="$?"
    cmd=$(history|tail -1)
    if [ "$cmd" != "$cmd_old" ]; then
       logger -p local1.debug "[1] PID=$$, PWD=$PWD, ID=$LOGNAME, IP=$CONN_IP, CMD=$cmd"
    fi
    cmd_old=$cmd
}
trap logging DEBUG

 

2) syslog에 적용 하기

root@berasix:~# vi /etc/syslog.conf

## 아래 내용 추가. log level에 따라 기록되는 로그 내용이 달라집니다. ###
local1.debug                    /var/log/cmd.log

※ 참고 : 원격지 syslog 설정

원격지로 명령을 보내려면, 마찬가지 방법으로 /etc/syslog.conf 에 다음을 추가하고, 재실행하면 된다. 
물론 수신받는 원격지 syslog 서버에서는 메시지 수신을 허용해둔 상태여야 한다.

  
local1.*                                @192.168.123.2  ## @ 1개는 UDP, @@ 2개는 TCP로 원격전송


3) 로그 rotate 시키기

root@berasix:~# vi /etc/logrotate.d/rsyslog

## 아래 내용 추가 ###

/var/log/messages 
/var/log/secure 
/var/log/maillog 
/var/log/spooler
/var/log/boot.log 
/var/log/cron 
/var/log/cmd.log  ### <=== 추가
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}


4) syslog 재기동
systemctl restart rsyslog.service


5) 원격으로 재접속 후 로그 생성 확인

▶ 로그 형태
Dec  6 13:10:21 host raonyn: [1] ID=raonyn, PID=7448, PWD=/home/raonyn, IP=192.168.1.25, CMD=   19  exit
Dec  6 13:10:22 host raonyn: [1] ID=raonyn, PID=10591, PWD=/home/raonyn, IP=192.168.1.25, CMD=   20  su -
Dec  6 13:10:22 host raonyn: [1] ID=root, PID=10716, PWD=/root, IP=192.168.1.25, CMD= 1000  /script/syscheck.sh

 

728x90

댓글