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
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
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.
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