web-dev-qa-db-fra.com

Journalisation SFTP: existe-t-il un moyen?

Je me demande s'il existe un moyen de consigner les commandes reçues par le serveur. Il peut s'agir de toutes les commandes SSH, à condition qu'elles contiennent des informations sur les commandes liées au transfert de fichiers.

Je rencontre des problèmes avec un client SFTP et le créateur demande des journaux, mais je ne trouve aucun journal existant.

Je cherche à me connecter sur les deux ou CentOS ou OS X (bien que je soupçonne que c'est possible, ce serait similaire sur les deux).

94
Darryl Hein

Les versions OpenSSH 4.4p1 et supérieures (qui devraient inclure la dernière version avec CentOS 5) ont une capacité de journalisation SFTP intégrée - il vous suffit de la configurer.

Trouvez ceci dans votre sshd_config (en centos, fichier / etc/ssh/sshd_config):

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

et changez-le en:

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

INFO n'est qu'un niveau de détail par rapport à ce que vous voyez par défaut - il fournit des informations détaillées sur les transferts de fichiers, les modifications d'autorisation, etc. Si vous avez besoin de plus d'informations, vous pouvez ajuster le niveau de journalisation en conséquence. Les différents niveaux (par ordre de détail) sont:

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

Tout ce qui se trouve sur VERBOSE est probablement plus d'informations que vous ne le recherchez, mais cela pourrait être utile.

Enfin, redémarrez le service SSH pour mettre à jour les modifications (centos):

systemctl restart sshd
96
rvf

Les mêmes commutateurs autour de la journalisation pour sftp-server fonctionnent également pour internal-sftp. Voici un exemple de mon/etc/ssh/sshd_config:

Subsystem   sftp    internal-sftp -f AUTH -l INFO

Avec la journalisation au niveau INFO activée, les messages commenceront à apparaître sous/var/log/messages (au moins sous Distros basés sur Red Hat):

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
44
slm

Afin de clarifier les commentaires ci-dessus:

Si vous avez configuré sftp à l'aide d'une prison (environnement chroot), vous ne pouvez pas vous connecter sans effort de configuration supplémentaire. Le journal ne peut pas être écrit dans l'environnement chroot, vous devez créer une liaison de montage ou une socket. Je recommanderais d'utiliser un socket, car c'est une fonctionnalité fournie par syslog-ng ainsi que rsyslog (et peut-être beaucoup plus).

Pour ceux qui utilisent syslog-ng, jetez un œil à ce lien . Pour ceux qui utilisent rsyslog; J'espère que ça aide .

2
Phil