Índice - Tutoriais

Samba, parte 2: Configuração avançada do Samba

Por Carlos E. Morimoto em 4 de dezembro de 2007 às 10h34

8

Auditando os acessos

O Samba oferece também um recurso de geração de log. Ele pode ser ativado adicionando as opções abaixo na seção [global] do smb.conf:

log level = 1
log file = /var/log/samba.log
max log size = 1000

A opção "log level" indica o nível das mensagens (de 0 a 10), sendo que o nível 0 mostra apenas mensagens críticas, o nível 1 mostra alguns detalhes sobre os acessos e os demais mostram diversos níveis de informações de debug, úteis a desenvolvedores. A opção "log file" indica o arquivo onde ele será gerado e a "max log size" indica o tamanho máximo, em kbytes.

A partir do Samba 3.04 foi incluído um módulo de auditoria, que permite logar os acessos e as modificações feitas de uma forma muito mais completa que o log tradicional. Isso é feito através do módulo "full_audit", que (do ponto de vista técnico) funciona de forma similar ao módulo "recycle" usado pela lixeira.

O primeiro passo é ativar o módulo, o que é feito através da linha abaixo:

vfs objects = full_audit

O próximo passo é definir quais operações devem ser logadas através da opção "full_audit:success", como em:

full_audit:success = open, opendir, write, unlink, rename, mkdir, rmdir, chmod, chown
(as opções formam uma única linha)

As opções que incluí no exemplo são open (ler um arquivo), opendir (ver os arquivos dentro de uma pasta), write (alterar um arquivo), unlink (deletar um arquivo), rename (renomear um arquivo), mkdir (criar um diretório), rmdir (remover um diretório), chmod (alterar as permissões de acesso de um arquivo) e chown (mudar o dono de um arquivo).

Você pode remover algumas destas opções, deixando apenas as opções desejadas, ou ver uma lista completa das opções que podem ser incluídas no manual do vfs_full_audit, disponível no:
http://samba.org/samba/docs/man/manpages-3/vfs_full_audit.8.html

Continuando a configuração, especificamos as informações que desejamos que sejam incluídas no log, usando a opção "full_audit:prefix". Aqui podemos utilizar as variáveis que mostrei no tópico sobre o compartilhamento [homes], como a "%u" (o nome do usuário), "%I" (o IP da máquina) e "%S" (o nome do compartilhamento onde foi feito o acesso ou a alteração). Não é necessário incluir a variável referente ao nome da máquina, pois o nome é incluído automaticamente:

full_audit:prefix = %u|%I|%S

Por padrão, o módulo loga não apenas os acessos e modificações, mas também um grande volume de mensagens de alerta e erros gerados durante a operação. A opção "full_audit:failure = none" evita que estas mensagens sejam logadas, fazendo com que o log fique muito mais limpo e seja mais fácil encontrar as opções que realmente interessam:

full_audit:failure = none

Concluindo, especificamos o nível dos alertas, entre os suportados pelo syslog, como em:

full_audit:facility = local5
full_audit:priority = notice

Juntando tudo, temos:

vfs objects = full_audit
full_audit:success = open, opendir, write, unlink, rename, mkdir, rmdir, chmod, chown
full_audit:prefix = %u|%I|%S
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice

Esta configuração pode ser tanto incluída dentro da seção [global] (de forma que o log inclua os acessos e as alterações feitas em todos os compartilhamentos) quanto ser incluída apenas na configuração de um compartilhamento específico.

Com isso, o Samba vai passar a gerar os eventos referentes aos acessos. Falta agora configurar o sysklogd (o serviço responsável pela geração dos logs do sistema), para logar os eventos, gerando o arquivo de log que poderá ser consultado. Para isso, abra o arquivo "/etc/syslog.conf" e adicione a linha abaixo:

local5.notice /var/log/samba-full_audit.log

Note que o "local5.notice" corresponde aos valores informados nas opções "full_audit:facility" e "full_audit:priority", enquanto o "/var/log/samba-full_audit.log" é o arquivo de log que será gerado.

Depois de concluída a configuração, reinicie os serviços e o log passará a ser gerado imediatamente:

# /etc/init.d/samba restart
# /etc/init.d/sysklogd restart

Dentro do arquivo, você verá entradas contendo a data e hora, o nome da máquina, o usuário, o IP da máquina, o nome do compartilhamento, a operação realizada e o nome do arquivo ou pasta onde ela foi realizada, como em:

Nov 18 15:21:15 m5 smbd_audit: joao|192.168.1.23|arquivos|opendir|ok|.
Nov 18 15:21:29 m5 smbd_audit: joao|192.168.1.23|arquivos|open|ok|r|addr.txt
Nov 18 15:21:34 m5 smbd_audit: joao|192.168.1.23|arquivos|mkdir|ok|trabalho
Nov 18 15:21:36 m5 smbd_audit: joao|192.168.1.23|arquivos|opendir|ok|trabalho
Nov 18 15:21:43 m5 smbd_audit: joao|192.168.1.23|arquivos|open|ok|w|trabalho/Samba.sxw
Nov 18 15:21:44 m5 smbd_audit: joao|192.168.1.23|arquivos|open|ok|w|trabalho/foto.jpg

O log conterá entradas referentes a todos os usuários e máquinas, mas é fácil ver apenas as entradas referentes a um determinado usuário, compartilhamento, endereço IP ou outro parâmetro qualquer ao listar o arquivo pelo terminal usando o grep, que permite mostrar apenas as linhas contendo determinados trechos de texto, como em:

# cat /var/log/samba-full_audit.log | grep "joao|192.168.1.23"

(mostra os acessos provenientes do usuário joao, feitos a partir do endereço 192.168.1.23)

# cat /var/log/samba-full_audit.log | grep "|arquivos|"

(acessos feitos ao compartilhamento "arquivos", por parte de qualquer usuário)

... e assim por diante. Você pode também direcionar a saída para um novo arquivo (ao invés de tentar lê-la pelo próprio terminal), como em:

# cat /var/log/samba-full_audit.log | grep "|arquivos|" > arquivos.log

8 comentáriosPor Carlos E. Morimoto. Revisado 24 de junho de 2009 às 21h34

Comentários

Como adicionar as pastas da lixeira como exeção?
por Spyder.RV em 4 de novembro de 2011 às 09h05
Bom dia...

Obrigado pelo excelente material... eu sempre achei samba um bicho-de-sete-cabeças ;-D... mas agora ficou fácil e claro. Parabéns.

Uma dúvida sobre a lixeira:

Como faço para que os arquivos que vão pra lixeira possam ser excluídos? Comigo aqui está ocorrendo que quando exclui um arquivo da lixeira, é criada uma cópia dentro da própria lixeira.
Lixeira Samba Server por Diego Ferraz (anônimo)
guest only
por Pietro (anônimo) em 19 de novembro de 2010 às 17h09
Essa opção funciona se vc usar security = share
Muito bom por holliday
segui a risca e não funcionou..
por Kleber Cardoso (anônimo) em 9 de novembro de 2011 às 18h27
Amigo, segui a risca, mas não funcionou... até que ele cria a pasta com o nome do usuário logado quando este apaga algum arquivo do compartilhamento, mas o arquivo não aparece lá... o que pode ser?
Copartilhamento
por Alex (anônimo) em 24 de maio de 2011 às 14h19
Boa tarde.
Quando mapeio uma determinada pasta no ubuntu "versoes", não consigo visualizar todos os arquivos, além do mais em maquinas diferentes a quantidade de arquivos é diferente e no windows aparentemente funciona normal.

Obrigado
monitorar alguns usuarios
por kleber (anônimo) em 13 de maio de 2011 às 16h41
Gostaria de usar este monitoramento, mas so para alguns usuarios, pois notei que como tenho mais de 100 usuario na rede o arquivo de log esta ficando muito grande, e nao tenho a necessidade de monitorar tantos usuarios.
Os logs nao sao criados
por Thompson (anônimo) em 25 de março de 2011 às 21h39
Criei uma pasta para conter os logs do samba no diretorio do meu servidor: EX: servidor/Logs/samba/
a ideia era criar um arquivo de log para cada usuario:

[servidor]
log level = 1
log file = /home/servidor/Logs/samba/%U.log
max log size = 100
vfs objects = full_audit
full_audit:success = open, opendir, write, unlink, rename, mkdir, rmdir, chmod, chown
full_audit:prefix = %u|%I|%S|%T
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice

No entanto os arquivo nao sao criados. Alguem sabe como resolver?

PS: estou utilizando o samba 4

ao usar o comando samba restart, ele nao reconhece o comando: max log size e nem o vfs objects, fala que é desconhecido..

Alguem sabe resolver?