web-dev-qa-db-fra.com

Comment configurer la journalisation de l'accès aux fichiers SFTP pour OpenSSH?

J'ai une configuration SFTP utilisant le sous-système intégré sftp d'OpenSSH avec des utilisateurs chrootés.

Autrefois, lorsque j'utilisais FTP, je pouvais voir quels fichiers étaient consultés par les utilisateurs dans les journaux.

Comment obtenir la même chose avec OpenSSH/SFTP?

Parties pertinentes de mon /etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match group sftponly
    ChrootDirectory /home/%u
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
4
kraxor

Par défaut, sshd enregistre les journaux système, avec les informations de niveau de journalisation INFO et la fonction syslog AUTH. Donc, l'endroit où chercher les données de journal de sshd se trouve dans

/var/log/auth.log

Ces valeurs par défaut peuvent être remplacées à l'aide des directives SyslogFacility et LogLevel. Vous trouverez ci-dessous une entrée de démarrage de serveur typique dans le journal d'autorisation.

Dans la plupart des cas, le niveau de consignation par défaut est correct.

Ce qui suit ne devrait vous donner que les lignes de journal liées à ssh

grep 'sshd' /var/log/auth.log

Pour être sûr, récupérez les quelques centaines de dernières lignes, puis effectuez une recherche (car si le fichier journal est trop volumineux, grep consomme plus de ressources système, sans compter que son exécution prendra plus de temps).

tail -500 /var/log/auth.log | grep 'sshd'

MODIFIER:

De man sshd_config

 LogLevel
         Gives the verbosity level that is used when logging messages from
         sshd(8).  The possible values are: QUIET, FATAL, ERROR, INFO,
         VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3.  The default is INFO.
         DEBUG and DEBUG1 are equivalent.  DEBUG2 and DEBUG3 each specify
         higher levels of debugging output.  Logging with a DEBUG level
         violates the privacy of users and is not recommended.

afin que vous puissiez modifier ce paramètre dans sshd_config. Mais semble ne pas suivre les fichiers.

Vous pouvez enquêter un peu si:

1) Pour trouver tous les fichiers NON détenus par votre utilisateur connecté dans votre dossier personnel, tapez:

find ~ -type f ! -user $USER

1.1) Pour trouver tous les fichiers qui n'appartiennent à aucun utilisateur légitime (ils ne devraient pas exister), tapez:

find ~ -type f -nouser

2) Comme les fichiers du système ont trois horodatages appelés mtime (heure de modification du fichier), ctime (heure de changement d'inode et autorisations) et atime (heure d'accès au fichier), ils peuvent être interrogés pour savoir comment les fichiers ont été modifiés. On se demande souvent lequel des deux est le meilleur, mais le meilleur moyen de savoir quand les fichiers ont été consultés ou modifiés consiste à utiliser la commande find pour rechercher atime et mtime, avec lesquels vous spécifiez il y a jours, et le nom supplémentaire find. options amin et mmin, avec lesquelles vous spécifiez minutes auparavant.

Les mêmes commutateurs de commande sont utilisés pour chacune de ces commandes: par exemple, -atime 1 correspond aux fichiers auxquels l'utilisateur a accédé exactement il y a 1 jour; pour spécifier more ou less than, ajoutez respectivement un + ou un -. Les exemples ci-dessous peuvent clarifier tout cela (spécifiez -type d pour les répertoires):

find ~ -type f -atime 1 
find ~ -type f -amin -23
find ~ -type f -mtime 2    
find ~ -type f -mmin -45

Pour combiner mes approches jusqu'à présent, vous pouvez entrer les commandes suivantes à partir de votre dossier personnel. le premier recherche les fichiers auxquels accède une personne qui n'est PAS votre utilisateur, et le second tous les fichiers modifiés par des personnes autres que votre utilisateur il y a moins de deux jours.

find ~ -type f -atime -2 ! -user $USER
find ~ -type f -mtime -2 ! -user $USER
6
Ruslan Gerasimov

Dans votre sshd_config (principalement/etc/ssh/sshd_config), essayez quelque chose comme:

Subsystem   sftp    internal-sftp -f AUTH -l INFO

ou

Subsystem   sftp    internal-sftp -l INFO

Je pense que ce sont les niveaux de journalisation:

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

Si vous avez besoin de plus de détails sur le journal, augmentez le niveau de journalisation.

3
Midhun Jose

Vous pouvez utiliser un wrapper autour de votre exécutable sftp-server en tant que tel:

`    
#!/bin/sh
# sftpd wrapper script for executing pre/post session actions

# pre session actions and logging here
SOURCE_IP=${SSH_CLIENT%% *}
MSG_SESSION_START="user $LOGNAME session start from $SOURCE_IP"
logger -p local5.notice -t sftpd-wrapper -i "$MSG_SESSION_START"

# start actual SFTP session
/usr/libexec/openssh/sftp-server

# add post session actions here
`

... et ajustez ensuite votre configuration syslogd.conf pour diriger la note locale5.notice vers un fichier journal approprié, en tant que tel:

local5.*                                                /var/log/sftpd.log

Enfin, pour voir quels fichiers sont en cours de transfert, vous pouvez ajuster globalement dans sshd_config; ou par utilisateur en ajustant le script ci-dessus, en ajoutant simplement le paramètre suivant pour que le sous-processus sftp consigne les fichiers en cours de transfert:

/usr/libexec/openssh/sftp-server -f local5 -l info

j'espère que cela t'aides ! : p

2
Selt Mitchell