No meu primeiro artigo do ano, vou compartilhar o procedimento de configuração dos módulos VFS audit e recycle que permitem registrar cada operação feita sobre os arquivos e criar uma “lixeira” no estilo windows, respectivamente.
Os módulos VFS foram introduzidos na versão 3 do Samba e foram muito bem aceitos pela comunidade. Essencialmente, o Samba passa cada requisição de acesso a um arquivo para os módulos VFS “grudados” em um compartilhamento, permitindo “capturar” informações como qual arquivo está sendo solicitado, qual o tipo de operação, quem está solicitando e muito mais. Isto permitiu o desenvolvimento de módulos plugáveis que podem extender as funcionalidades do Samba.
Neste artigo eu vou apresentar apenas dois módulos VFS que uso em meu ambiente, o audit e o recycle. Para uma lista completa dos módulos existentes, visite http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/VFS.html#id2650657.
Verificando os módulos VFS instalados
Para verificar se a sua instalação do Samba possui os módulos VFS instalados, execute o comando abaixo e observe a saída:
[bruno@ubuntu samba]# pwd /usr/local/samba [bruno@ubuntu samba]# ls -l lib/vfs total 636 -rwxr-xr-x 1 root root 38932 Jun 2 2011 acl_tdb.so -rwxr-xr-x 1 root root 34586 Jun 2 2011 acl_xattr.so -rwxr-xr-x 1 root root 14676 Jun 2 2011 audit.so -rwxr-xr-x 1 root root 25258 Jun 2 2011 cap.so -rwxr-xr-x 1 root root 25258 Jun 2 2011 catia.so ... -rwxr-xr-x 1 root root 14013 Jun 2 2011 readahead.so -rwxr-xr-x 1 root root 27057 Jun 2 2011 readonly.so -rwxr-xr-x 1 root root 28886 Jun 2 2011 recycle.so -rwxr-xr-x 1 root root 29617 Jun 2 2011 scannedonly.so -rwxr-xr-x 1 root root 38394 Jun 2 2011 shadow_copy2.so ... [root@hades samba]#
Na saída acima, garanti que os módulos audit (audit.so) e recycle (recycle.so) estão instalados corretamente.
Habilitando os módulos VFS
Para habilitar os módulos VFS, basta utilizar a opção vfs objects dentro de qualquer serviço (share) e os módulos especificados serão carregados para este serviço. Se preferir, pode habilitar um ou mais módulos de forma global (para todos os serviços) especificando a opção vfs objects na seção [global].
A opção vfs objects espera um ou mais nomes de módulos separados por um espaço simples. É importante observar que o Samba respeita a ordem dos módulos definida, passando a requisição primeiro para o primeiro módulo, depois para o segundo e assim por diante. Esta ordem pode ser essencial para conseguir uma configuração específica. Por exemplo:
[audit] comment = Audited /data directory path = /data vfs objects = audit recycle writeable = yes browseable = yes
A configuração acima define que o Samba deve passar as requisições primeiro para o módulo audit e depois para o módulo recycle.
Configurando os módulos VFS
A configuração dos módulos no arquivo de configuração utiliza o mesmo modelo opção = valor utilizado no arquivo smb.conf, mas são sempre prefixados com o nome do módulo. Por exemplo:
[global] vfs objects = audit audit:facility = LOCAL1 audit:priority = NOTICE
Observe que as opções do módulo audit são prefixadas com o nome do módulo.
Configurando os módulo audit e recycle para um serviço
Agora que sabemos como carregar e configurar os módulos VFS. Vamos colocar este conhecimento em prática, carregando e configurando o módulos audit e recycle para um serviço qualquer. Neste artigo, vou assumir que meu chefe gostaria de registrar todas as operações (auditar) nos arquivos do serviço (compartilhamento) de documentações, bem como criar uma lixeira para recuperar algum arquivo removido por engano.
Antes de carregar e configurar estes módulos, é importante entender como estes módulos funcionam, essencialmente. O módulo audit permite registrar alguns eventos que ocorrem sob um serviço como:
- Abrir e fechar um serviço
- Abrir, criar e remover diretórios
- Abrir, fechar, renomear, remover (unlink) e alterar o modo de acesso (chmod)
Estes eventos podem ser registrados no arquivo de log do Samba ou em uma facility do syslog, que é a opção que eu recomendo. Para mais informações sobre este módulo VFS, visite http://www.samba.org/samba/docs/man/manpages-3/vfs_audit.8.html.
O módulo recycle permite manter uma cópia de todos os arquivos removidos (unlink) de um serviço em um diretório específico, como a clássica lixeira do Windows. Para mais informações sobre este módulo, visite http://www.samba.org/samba/docs/man/manpages-3/vfs_recycle.8.html.
Mãos à obra!
[docs] comment = Compartilhamento para as documentações dos projetos path = /docs vfs objects = audit recycle writeable = yes browseable = yes audit:facility = LOCAL1 audit:priority = NOTICE recycle:repository = .recycle recycle:touch = yes
No trecho de arquivo de configuração acima:
- Carreguei os módulos VFS audit e recycle, utilizando a opção vfs objects
- Configurei o módulo audit para utilizar a facility LOCAL1 do meu sistema de syslog
- Configurei o módulo audit para utilizar o nível de prioridade NOTICE do meu sistema de syslog
- Configurei o módulo recycle para utilizar um diretório .recycle. Esta é a configuração padrão
- Configurei o módulo recycle para alterar a data de modificação dos arquivos da lixeira. Assim é possível saber a data e hora que estes arquivos foram removidos
- Monitore o arquivo de log (/var/log/local1) e crie, renomei e remova alguns arquivos do serviço configurado
- Remove um arquivo do serviço configurado e confirme que uma cópia deste arquivo existe no diretório .recycle, sob o diretório configurado na opção path do serviço
Jan 9 08:17:45 ubuntu smbd_audit: bruno|192.168.1.144|unlink|ok|erp/welcome.pdf
A linha acima contém informações interessantes, como a data e hora da operação, qual o usuário, endereço IP do host, operação, se esta operação “deu certo” ou não e o arquivo que foi criado/removido/alterado/etc.
Configurações adicionais
Que maravilha, você agora tem um registro de alguns eventos sobre os arquivos de seu servidor Samba e também pode se exibir para os usuários do ambiente dizendo que pode recuperar os arquivos que eles removeram magicamente. Isto é suficiente para agradar o seu chefe e ganhar alguns pontos com os usuários. Mas um bom administrador de redes nunca se deixa vencer pelo sucesso (ou por um aumento). Ainda temos trabalho a fazer.
Primeiro, dependendo do tamanho (em número de usuários e operações sobre arquivos) você pode ter, em alguns GBs de arquivos de log em poucos meses. Mesmo que você tenha muitos e muitos GBs disponíveis para estes arquivos de log, você ainda pode ter problemas quando precisar ler estes arquivos, ou até mesmo analisar estes arquivos com outras ferramentas. Para evitar este problema, vamos pedir a ajuda de nosso super-amigo: o logrotate.
Edite o seu arquivo /etc/logrotate.conf (ou crie um arquivo samba.conf sob o diretório /etc/logrotate.d) com as seguintes linhas:
/var/log/local1.log {
weekly
rotate 4
}
As linhas acima configuram o logrotate para manter 1 arquivo de log por semana, durante 4 semanas. Com esta configuração não teremos problemas com arquivos de log monstruosos. Fale com o seu chefe e pergunte quantas semanas (ou meses) ele gostaria de ter registrado, sempre informando dos problemas relacionados (espaço em disco por exemplo).
Tudo pronto? Calma, ainda podemos ter problemas com o tamanho de nossa lixeira, tendo em vista que não será possível clicar com o botão direito nesta lixeira e esvaziar. O módulo recycle não permite definir um tamanho máximo para a lixeira, mas podemos evitar que arquivos muito grandes sejam colocados lá, usando a opção maxsize do módulo recycle. Por exemplo:
[docs] comment = Compartilhamento para as documentações dos projetos path = /docs vfs objects = audit recycle writeable = yes browseable = yes audit:facility = LOCAL1 audit:priority = NOTICE recycle:repository = .recycle recycle:touch = yes recycle:maxsize = 1048576 # Tamanho em bytes
A linha em negrito acima evita que arquivos maiores que 1MB sejam guardados na lixeira. Novamente, converse com o seu chefe e defina qual o tamanho ideal para o seu ambiente.
Conclusão
Neste artigo, compartilhei como carregar e configurar os módulos VFS audit e recycle do Samba. Estes módulos permitem, respectivamente, registrar alterações nos diretórios e arquivos de um serviço e guardar cópias de arquivos removidos em um diretório, no estilo lixeira do Windows. Também apresentei como utilizar o syslog para armazenar estes eventos, como configurar o logrotate para não ter problemas com arquivos de log monstruosos e ainda como limitar o tamanho dos arquivos da lixeira.
Comentários são sempre bem-vindos ;)