Programming/Linux

linux sftp log 설정 방법 (접속 및 작업 로그)

Jan92 2023. 2. 16. 23:08

Linux SFTP Log

Linux 운영체제 SFTP 로그 설정 방법

sftp 작업은 기본적으로 로그를 남기지 않습니다. 때문에 로그를 남기기 위해서는 아래 내용과 같은 추가 설정 작업이 필요한데요.

 

전체적인 작업은 편집기를 통한 3개의 파일(sshd_config, rsyslog.conf, rsyslog) 내용 수정 및 프로그램(rsyslog, sshd) 재실행으로 실행되며, 짧은 시간에 적용할 수 있는 부분입니다.

(해당 포스팅의 내용은 Ubuntu 18.04.6 LTS 환경에서 작업된 내용입니다.)

 


1. /etc/ssh/sshd_config 파일 수정

sshd_config

편집기를 통해 /etc/ssh 디렉터리 내에 있는 sshd 설정 파일인 'shd_config' 파일을 수정합니다.

 

#수정 전
Subsystem sftp /usr/lib/openssh/sftp-server
#수정 후
Subsystem sftp /usr/lib/openssh/sftp-server -f local5 -l INFO

sshd_config 파일에서 만약 해당 부분이 주석 처리가 되어있다면 주석 처리를 해제하고 아래 수정 후의 내용처럼 입력해 주시면 되는데요.

 

sftp-server에 대한 자세한 내용은 man sftp-server 명령어를 통해 확인할 수 있으며, 옵션에 대해 간단하게 설명드리자면 -f의 경우 log_facility에 대한 옵션이며, -i의 경우 log_level에 대한 옵션입니다.

(default log_level = ERROR)

 

구글링을 통한 대부분의 예시들에서 facility를 local2로 사용하고 있는데 log_facility의 경우 꼭 local2를 사용해야 하는 것은 아니며, 시스템에서 사용할 수 있는 local0 ~ local7 중 사용되고 있지 않은 것을 사용할 수 있습니다.

(필요할 경우 local이 아닌 다른 facility로도 설정이 가능합니다.)

 

 


2. /etc/rsyslog.conf 파일 수정

rsyslog.conf

'rsyslog.conf' 파일은 linux에서 각종 시스템 로그를 관장하는 rsyslog의 설정 파일인데요.

버전에 따라 syslog 또는 rsyslog가 사용될 수 있으며, CentOS 7 또는 Ubuntu 14.04 이상의 버전에서는 rsyslog를 표준으로 사용하고 있습니다.

(리눅스 초기에는 로그 기록과 관련된 패키지로 syslog를 사용했지만, 이후 버전에서는 성능이 강화된 rsyslog 패키지가 사용되고 있습니다.)

 

#sftp log
local5.*			/var/log/sftp.log

마찬가지로 편집기를 통해 rsyslog.conf 파일의 맨 마지막에 위 내용을 추가합니다.

 

rsyslog.conf의 rule은 facility.priority action으로 이루어져 있는데요.

 

'facility'는 로그를 출력하는 서비스 또는 프로그램에 대한 설정으로 auth, cron, daemon, user 등이 있으며, 예시에서 사용된 local은 local0 ~ local7까지 존재하는 시스템 부팅 메시지를 의미합니다.

 

'priority'는 로그의 위험도를 구분하는 구분값(none, debug, info, warn 등)을 설정하는 부분입니다.

 

'action'은 특정 facility에 지정된 priority에 해당하는 로그가 발생했을 경우 메시지를 보낼 대상 또는 액션을 정의하는 부분입니다.

예시의 /var/log/sftp.log 처럼 로그가 기록된 파일을 지정할 수 있으며(file), @127.123.4.5 처럼 특정 외부 호스트를 지정(host)하여 로그를 보낼 수도 있습니다.

 

 


3. /etc/logrotate.d/rsyslog 파일 수정

rsyslog

logrotate는 쌓이는 로그 파일을 관리하고 순환시키기 위한 프로그램인데요.

logrotate의 설정 파일은 /etc/logrotate.conf에 있지만 해당 설정 파일에서 incloud /etc/logrotate.d 가 설정되어 있기 때문에 /etc/logrotate.d 디렉터리의 'rsyslog' 파일을 수정하면 설정이 적용됩니다.

 

/var/log/sftp.log

파일에는 편집기를 통해 위 내용을 추가해 주면 됩니다.

 

 


4. 서비스 재실행

#rsyslog 재실행
systemctl restart rsyslog
#sshd 재실행
systemctl restart sshd

설정을 마쳤으면 systemctl restart <service name> 명령어를 통해 서비스를 재실행해야 하는데요.

필요한 경우 status 옵션을 통해 서비스의 작동 상태를 확인할 수 있습니다.

 

***

systemctl을 통한 명령어와 service를 통한 명령어는 같은 동작을 수행하는데요.

CentOS 6 이하의 버전에서는 service 명령어를 사용하고, CentOS 7 이상의 버전에서는 systemctl 명령어를 사용할 수 있다는 차이가 있습니다.

(CentOS 7 이상의 버전에서 service 명령어를 사용하면 내부적으로 Redirecting to /bin/systemctl start <service name>.service 처럼 변경되어 실행됩니다.)

 

 

여기까지가 sftp 로그를 기록하기 위한 설정이며, 서비스 재실행 후 sftp 접속이 일어나면 /var/log 디렉터리에 'sftp.log' 파일이 생성되며 로그 내용이 기록됩니다.

 

rw-r----- 1 syslog adm 249 Feb 16 04:50 sftp.log

(소유자가 syslog로 된 파일이 생성되며, 소유자 및 그룹에서 쓰기 권한을 보유하고 있습니다.)

 

만약 파일이 생성되지 않아 수동으로 파일을 생성하는 경우(touch 명령어를 사용한)에는 파일의 쓰기 권한 등으로 인해 기록이 되지 않는 문제가 발생할 수 있다는 점 참고하시면 좋을 것 같습니다.

 

 

tail -f /var/log/sftp.log

실시간 로그는 위 명령어를 통해 확인할 수 있습니다.