Nível de log de atividades no SFTP

7

Estou usando o CentOS, já descobri como ativar o log SFTP. Depois disso, quando eu testá-lo usando o FileZilla (do fim do usuário) e tail -f /var/log/sftp.log do servidor, todas as atividades dos usuários são certamente registradas. Trabalhando muito bem!

Mas ainda tenho algumas questões importantes relacionadas a isso, conforme abaixo:

  • No arquivo de log, nada é mencionado sobre o USERNAME. Os USERNAMES não são registrados / mencionados em qualquer parte do LOGS para cada atividade (Apenas as atividades de login / logout FTP são registradas, como uma única linha entre milhões de linhas. Mas não é efetivo se eu tiver mais de 1 usuário)

Por exemplo:

Feb 27 02:59:31 myhostname sftp-server[13307]: session opened for local user michael from [10.xxx.xxx.xxx]
Feb 27 03:01:00 myhostname sftp-server[13312]: session opened for local user jimmy from [10.xxx.xxx.xxx]
...
...
Feb 27 04:00:34 myhostname sftp-server[13307]: mkdir name "/var/www/html/nnnnn" mode 0777
...
Feb 27 04:01:30 myhostname sftp-server[13307]: rmdir name "/var/www/html/nnnnn"
Feb 27 04:01:30 myhostname sftp-server[13307]: opendir "/var/www/html"
Feb 27 04:01:30 myhostname sftp-server[13307]: closedir "/var/www/html"

NÃO há USERNAME mencionado nas próprias linhas . (Exceto para as ações de login / logout)
E a outra pergunta é:

  • Por quanto tempo posso manter esses registros? Quero dizer, é possível se eu quiser que o LOG FILE mantenha sempre as linhas dentro dos últimos 6 meses?

Alguma ideia, por favor?

    
por 夏期劇場 27.02.2014 / 04:51

1 resposta

7

Veja um exemplo de saída do arquivo de log:

Feb 26 23:04:55 pegasus internal-sftp[32524]: session opened for local user joeuser from [123.123.123.123]
Feb 26 23:04:57 pegasus internal-sftp[32524]: opendir "/home/joeuser"
Feb 26 23:04:58 pegasus internal-sftp[32524]: closedir "/home/joeuser"
Feb 26 23:05:01 pegasus internal-sftp[32524]: opendir "/home/joeuser/"
Feb 26 23:05:01 pegasus internal-sftp[32524]: closedir "/home/joeuser/"
Feb 26 23:05:02 pegasus internal-sftp[32524]: opendir "/home/joeuser/upload"
Feb 26 23:05:02 pegasus internal-sftp[32524]: closedir "/home/joeuser/upload"
Feb 26 23:05:07 pegasus internal-sftp[32524]: opendir "/home/joeuser/upload"
Feb 26 23:05:07 pegasus internal-sftp[32524]: closedir "/home/joeuser/upload"
Feb 26 23:05:09 pegasus internal-sftp[32524]: session closed for local user joeuser from [123.123.123.123]

Qual usuário é qual?

Se você observar a saída acima, há um número entre colchetes, internal-sftp[32524] . O número é 32524. Isso representa o ID da sessão do usuário joeuser, portanto, você pode usar essa cadeia junto com as mensagens relacionadas ao login do usuário.

Rotacionando os logs

Você pode modificar o agendamento de rotação de log para vários logs em /etc/logrotate.d/* . Cada arquivo de log geralmente possui um arquivo correspondente nesse diretório. Assim, você pode alterar o arquivo syslog , por exemplo, ou criar o seu próprio para o seu sftp.log logfile.

Além disso, logrotate tem um arquivo de configuração, /etc/logrotate.conf , que contém estas linhas:

# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

Estes são os arquivos usados no diretório /etc/logrotate.d , se eles não tiverem uma configuração própria. Portanto, a maioria dos arquivos é girada semanalmente e 4 deles são mantidos. Se você quisesse manter 6 meses, seria 4 * 6 = 24 para a opção rotate manter 6 meses, aproximadamente.

Exemplo

Se você estiver fazendo login em /var/log/sftp.log via syslog , será necessário fazer as alterações neste arquivo, /etc/logrotate.d/syslog . Seu arquivo ficará assim depois de fazer as alterações necessárias:

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/sftp.log
{
    rotate 24
    sharedscripts
    postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
    endscript
}

Como você está usando syslog , também precisará rotacionar todos esses arquivos de log. Além disso, mantenha 24 semanas no valor desses arquivos. Se isso for inaceitável, seu único outro curso de ação seria criar uma seção separada nesse arquivo, syslog da seguinte forma:

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
    endscript
}

/var/log/sftp.log
{
    rotate 24
    sharedscripts
    postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
    endscript
}

Isso tem alguns efeitos colaterais, sendo que você estará reiniciando o daemon syslog duas vezes por semana, em vez de uma vez. Mas a sintaxe logroate não permite um controle granular fino da programação de rotação para certos arquivos de log enquanto não estiver rodando outros, quando os arquivos de log estão sendo gerados pelo mesmo serviço, ou seja, syslog .

Referências

por 27.02.2014 / 05:09