SFTP 로깅 : 방법이 있습니까?


91

서버가받은 명령을 기록하는 방법이 있는지 궁금합니다. 파일 전송과 관련된 명령에 대한 정보가 포함되어 있으면 모든 SSH 명령이 될 수 있습니다.

SFTP 클라이언트에 문제가 있는데 작성자가 로그를 요청하지만 기존 로그를 찾을 수 없습니다.

CentOS 또는 OS X 모두 또는 둘 다에 로그온하려고합니다 (가능한지 의심되지만 둘 다 비슷할 것입니다).


답변:


94

OpenSSH 버전 4.4p1 이상 (CentOS 5가 포함 된 최신 버전 포함)에는 SFTP 로깅 기능이 내장되어 있으므로 구성하기 만하면됩니다.

이것을 sshd_config (centos, / etc / ssh / sshd_config 파일)에서 찾으십시오 .

Subsystem       sftp    /usr/libexec/openssh/sftp-server

그것을 다음과 같이 변경하십시오 :

Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO

INFO는 기본적으로보고있는 것보다 세부적인 수준에 불과합니다. 파일 전송, 권한 변경 등에 대한 자세한 정보를 제공합니다. 추가 정보가 필요한 경우 그에 따라 로그 수준을 조정할 수 있습니다. 다양한 레벨 (세부 순서)은 다음과 같습니다.

QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3

VERBOSE 이상의 것은 아마도 당신이 찾고있는 것보다 더 많은 정보 일 것입니다. 그러나 그것은 유용 할 것입니다.

마지막으로 SSH 서비스를 다시 시작하여 변경 사항 (centos)을 업데이트하십시오.

systemctl restart sshd

1
SFTP를 그렇게 기록 할 수 있다는 것을 몰랐습니다. 로그는 어디에 저장합니까? /var/log/auth.log?
Rory

4
syslog 구성에 따라 다릅니다. INFO 로그 수준을 사용하면 대부분의 기본 syslog.conf는 해당 항목을 / var / log / messages에 배치합니다.
rvf

4
내부 sftp 서버를 사용하여이 작업을 수행 할 수 있습니까?
시안

이것은 SFTP에 완벽하게 작동하지만 SCP는 어떻습니까? sftp에서 로그가 성공적 이었음에도 불구하고 scp 명령으로 복사 한 파일에 대한 로그에서 항목을 찾지 못했습니다
Ale

2
우분투에서 이러한 로그는 기본적으로로 설정됩니다 /var/log/auth.log. -f USER해당 Subsystem구성 줄에 추가 하여 로 보내십시오 /var/log/syslog.
계정

43

sftp-server에 대한 로깅과 동일한 스위치도 internal-sftp에서도 작동합니다. 다음은 / etc / ssh / sshd_config의 예입니다.

Subsystem   sftp    internal-sftp -f AUTH -l INFO

INFO 레벨 로깅이 활성화되면 / var / log / messages (적어도 Red Hat 기반 Distros) 아래에 메시지가 표시됩니다.

May 27 05:58:16 test-server sshd[20044]: User child is on pid 20049
May 27 05:58:16 test-server sshd[20049]: subsystem request for sftp by user test-user
May 27 05:58:16 test-server internal-sftp[20050]: session opened for local user test-user from [192.168.1.1]
May 27 05:58:16 test-server internal-sftp[20050]: received client version 3
May 27 05:58:16 test-server internal-sftp[20050]: realpath "."
May 27 05:58:21 test-server internal-sftp[20050]: opendir "/home/test-user/"
May 27 05:58:21 test-server internal-sftp[20050]: closedir "/home/test-user/"
May 27 05:58:21 test-server internal-sftp[20050]: lstat name "/home/test-user/upload"
May 27 05:58:21 test-server internal-sftp[20050]: realpath "/home/test-user/upload/"
May 27 05:58:21 test-server internal-sftp[20050]: stat name "/home/test-user/upload"
May 27 05:58:24 test-server internal-sftp[20050]: open "/home/test-user/upload/test-file.pdf" flags WRITE,CREATE,TRUNCATE mode 0664
May 27 05:58:25 test-server internal-sftp[20050]: close "/home/test-user/upload/test-file.pdf" bytes read 0 written 1282941

2
내 경우에는 루트에 대해서만 sftp 세션을 기록하지만 chrooted 사용자 테스트에는 로깅하지 않습니다. 왜 그런지 모르겠습니다. 아이디어가 있습니까?
JohnnyFromBF

4
/dev/logchroot 영역에 필요한 것 같습니다 . 비슷해 sudo mkdir /chrooted/area/dev, sudo touch /chrooted/area/dev/log, sudo chmod 511 /chrooted/area/dev, sudo chattr +i /chrooted/area/dev, sudo mount --bind /dev/log /chrooted/area/dev/log. 사용자는 여전히 / dev / log에 대한 쓰기 액세스 권한을 갖지만 소켓이므로 액세스 권한이 모두있는 경우 많은 피해를 줄 수 없습니다 sftp.
sch

1
힌트 주셔서 감사합니다. 그러나 나는 그것을 작동시키는 것처럼 보이지 않습니다. 좀 더 구체적으로 말씀해 주시겠습니까?
user1092608

4
FWIW 다음 아치 리눅스 위키에서 chroot 환경에서 로깅을 활성화하는 방법에 대한 좋은 설명이있다 : wiki.archlinux.org/index.php/SFTP_chroot#Logging
Kaii

0

위의 주석을 지우려면 :

jail (chroot 환경)을 사용하여 sftp를 구성한 경우 추가 구성없이 로그 할 수 없습니다. chroot 환경에서 로그를 쓸 수 없으므로 마운트 바인드 또는 소켓을 작성해야합니다. 소켓은 syslog-ng 및 rsyslog (그리고 더 많은 것)가 제공하는 기능이므로 소켓을 사용하는 것이 좋습니다.

syslog-ng를 사용하는 사람들은 https://wiki.archlinux.org/index.php/SFTP_chroot#Logging을 살펴보십시오 . rsyslog를 사용하는 사람들에게는 https://wiki.kairaven.de/open/os/linux/sftpssh 가 당신의 친구입니다.

희망이 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.