Como configuro o log de acesso a arquivos SFTP para o OpenSSH?

3

Eu tenho uma configuração de SFTP usando o subsistema sftp interno do OpenSSH com usuários de chroot.

Nos velhos tempos, quando eu costumava usar o FTP, eu conseguia ver quais arquivos eram acessados pelos usuários nos registros.

Como faço para conseguir o mesmo usando o OpenSSH / SFTP?

Partes relevantes do meu /etc/ssh/sshd_config :

Subsystem sftp internal-sftp
Match group sftponly
    ChrootDirectory /home/%u
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    
por kraxor 30.06.2014 / 10:47

3 respostas

4

Por padrão, sshd registra nos logs do sistema, com o nível de log INFO e o recurso syslog AUTH. Então, o lugar para procurar por dados de log de sshd está em

/var/log/auth.log

Esses padrões podem ser substituídos usando as diretivas SyslogFacility e LogLevel. Abaixo está uma entrada típica de inicialização do servidor no log de autorização.

Na maioria dos casos, o nível padrão de registro é bom.

O seguinte deve dar apenas linhas de registro relacionadas a ssh

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

Para garantir, obtenha as últimas centenas de linhas e, em seguida, pesquise (porque se o arquivo de log for muito grande, o grep no arquivo inteiro consumiria mais recursos do sistema, sem mencionar que levaria mais tempo para ser executado)

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

EDITAR:

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.

para que você possa alterar esse parâmetro em sshd_config . Mas parece que não rastreia arquivos.

Você pode investigar um pouco:

1) Para localizar todos os arquivos que NÃO são de seu usuário conectado na sua pasta pessoal, digite:

find ~ -type f ! -user $USER

1.1) Para encontrar todos os arquivos que não pertencem a nenhum usuário legítimo (eles não devem existir), digite:

find ~ -type f -nouser

2) Como os arquivos no sistema têm três timestamps chamados mtime (tempo de modificação do arquivo), ctime (tempo de alteração do inode e permissões) e atime (tempo de acesso ao arquivo), eles podem ser consultados como os arquivos foram modificados. Muitas vezes, é debatido quais são os melhores para usar, mas provavelmente a melhor maneira de descobrir quando os arquivos foram acessados ou modificados é usar o comando find para pesquisar atime e mtime , com o qual você especifica dias atrás, e as find options amin e mmin , com as quais você especificou minutos atrás.

Para cada um desses comandos, as mesmas opções de comando são usadas: por exemplo, -atime 1 corresponderá aos arquivos que foram acessados exatamente 1 dia atrás; para especificar mais ou menor que , anexe um + ou um - , respectivamente. Os exemplos abaixo podem esclarecer tudo isso (especifique -type d para diretórios):

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

Para combinar minhas abordagens até agora, você poderia inserir os seguintes comandos da sua pasta pessoal; as primeiras pesquisas por arquivos acessados por uma pessoa que NÃO é seu usuário e a segunda por arquivos modificados por pessoas que não sejam do seu usuário há menos de dois dias.

find ~ -type f -atime -2 ! -user $USER
find ~ -type f -mtime -2 ! -user $USER
    
por Ruslan Gerasimov 30.06.2014 / 11:05
2

Você pode usar um wrapper em torno do seu executável sftp-server da seguinte forma:

'    
#!/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
'

... E, em seguida, ajuste sua configuração do syslogd.conf para direcionar o local5.notice para um arquivo de log apropriado, como:

local5.*                                                /var/log/sftpd.log

E, finalmente, para ver quais arquivos estão sendo transferidos, você pode ajustar globalmente em sshd_config; ou por usuário ajustando o script acima, simplesmente adicionando a seguinte configuração para tornar o log do subprocesso sftp os arquivos sendo transferidos:

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

espero que isso ajude! : p

    
por Selt Mitchell 29.01.2016 / 20:10
2

No seu sshd_config (principalmente / etc / ssh / sshd_config), tente algo como

Subsystem   sftp    internal-sftp -f AUTH -l INFO

ou

Subsystem   sftp    internal-sftp -l INFO

Acho que esses são os níveis de registro:

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

Se você precisar de mais detalhes sobre log, aumente o nível de registro

    
por Midhun Jose 04.05.2016 / 05:43