Servidor Samba : Lixeira e Auditoria

Dicas e conf's para servidores Linux
Avatar do usuário
marcelo0786
Global Moderator
Global Moderator
Mensagens: 127
Registrado em: 17 Jun 2013 17:43
Status: Offline

Servidor Samba : Lixeira e Auditoria

Mensagem por marcelo0786 »

Servidor Samba : Lixeira e Auditoria

Dois recursos que não podem faltar numa instalação do Samba, especialmente quando configurado para ser um servidor de Dominio é uma Lixeira para coletar os arquivos apagados na rede e também um modo de auditar eventos que ocorrem entre o usuário e o servidor. Apesar de ser fácil instalar, há pouca documentação na internet em português de como implementar isso, às vezes voce até encontra informações, porém as vezes desatualizadas acabam piorando ainda mais o problema e a consequencia de tudo isso acaba sendo a mesma : pipoca mensagens em lista de discussão perguntando sobre como implementar este ou outro serviço ao samba. Por essa razão estou escrevendo este pequeno howto, para ele servir de referencia quando tiver que responder a mesma pergunta.

O passo-a-passo a seguir considera que voce já esteja com o samba instalado e funcionando e queira apenas implementar o serviço de lixeira e auditoria. Verifique também a existência dos arquivos “recycle.so” e “full_audit.so” em /usr/lib/samba/vfs, sem estes arquivos este artigo não irá funcionar.

1. Implementando a lixeira na rede

1.1 Crie uma pasta que servirá de lixeira para sua rede Samba :

mkdir -p /var/spool/samba/lixeira

Qualquer pasta pode servir, mas recomendo também que voce dê permissão global a ela, não por causa do samba, mas caso seus usuários queiram nos seus compartilhamentos ter acesso a lixeira, voce poderá criar um link simbolico apontando a esta pasta.

1.2 Edite o arquivo /etc/samba/smb.conf e acrescente na sessão [Global] caso a lixeira servirá para todos os volumes compartilhamentos ou então apenas num dos seus [compartilhamentos] as linhas :

vfs objects = recycle
recycle:facility = LOCAL1
recycle:priority = NOTICE
recycle:maxsize = 0
recycle:repository = /var/spool/samba/lixeira/%U
recycle:directory_mode = 0777
recycle:subdir_mode = 0777
recycle:keeptree = Yes
recycle:touch = True
recycle:exclude = *.tmp, *.temp, *.log, *.ldb, *.o, *.obj, ~*.*, *.bak
recycle:exclude_dir = tmp, temp, cache
recycle:versions = Yes
recycle:noversions = .doc|.xls|.ppt|*.dcl

Uma pincelada rápida sobre as opções acima do módulo recycle :

recycle:facility = LOCAL1
recycle:priority = NOTICE

Voce está indicando que usará um arquivo de log para registrar a movimentação dessa lixeira, isso será feito por meio do syslogd de seu sistema e voce terá de configura-lo manualmente. Dá ultima vez que tentei não funcionou, portanto é provável que o módulo “recycle” não faça isso, embora tenha a opção para faze-lo.

recycle:maxsize = 0

Acima voce menciona em bytes o tamanho máximo de um arquivo para ele ir parar na lixeira, zero significa sem limites.

recycle:repository = /var/spool/samba/lixeira/%U

Na linha acima voce menciona onde será a sua lixeira. Se voce usar apenas uma palavra unica como “lixeira/%U” ao inves do path completo será criado uma pasta chamada “lixeira/usuario” dentro do compartilhamento e os arquivos apagados serão enviadas para lá, se ao invés disso, voce fizer o que indiquei acima, todos os arquivos vão parar no mesmo lugar. “%U” será interpretado pelo samba como nome do usuário que estiver conectado, assim se fulano excluir um arquivo, será criada uma pasta “fulano” dentro da lixeira com o nome dos arquivos eliminados por este.

recycle:directory_mode = 0777
recycle:subdir_mode = 0777
recycle:keeptree = Yes
recycle:touch = True

As linhas acima determinam as permissões dos diretórios, se é para guardar o nome da pasta de onde o arquivo foi excluído (keeptree) e se a data do arquivo eliminado pode ser trocado pela data da exclusão (touch).

recycle:exclude = *.tmp, *.temp, *.log, *.ldb, *.o, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, temp, cache

Acima voce determina respectivamente nome de arquivos e diretorios que deverão ser ignorados pela lixeira, isto é, se alguem excluir um .bak, ele terá sido excluido definitivamente.

recycle:versions = Yes
recycle:noversions = .doc|.xls|.ppt

Acima voce determina se haverá controle de versões(versions), isto é, se um arquivo for sobregravado então a cópia antiga será enviada para a lixeira, e se novamente sobregravar o mesmo arquivo, outra cópia será enviada para a lixeira, mas chegando na lixeira se houver um arquivo de mesmo nome já depositado lá então seu nome terá o sufixo “-copia1″, “-copia2″, etc… a outra opção (noversion) é justamente o contrário, não faz controle de versão para os arquivos que correspoderem ao parametro, eu indiquei arquivos do msoffice porque sabidamente o autosave desses programas vai trazer uma enxame de novas versões a partir do momento que um usuário abrir algum arquivo. O problema não é o autosave em sí, mas acontece que o autosave quando na rede vai superlotar a sua lixeira, também alguns usuários “topeiras” modificam o arquivo quando apenas querem lê-lo e “sem querer querendo” iniciam o processo de autosave. Outros aplicativos são mais expertos e fazem autosave na pasta temporária do windows, ainda outros como o autocad (só na ultima versão) trabalha com um nome temporário e somente depois da gravação ele renomeia-o para o nome real e com isso o controle de versões na lixeira funciona bem.

2. Habilitando a auditoria no servidor Samba

Primeiramente edite o arquivo /etc/samba/smb.conf e acrescente ao compartilhamento desejado (ou sessão [Global] se for para todos) as seguintes linhas :

vfs objects = full_audit
full_audit:facility = LOCAL5
full_audit:priority = NOTICE
full_audit:prefix = %u|%I|%S
full_audit:success = rename rmdir unlink
full_audit:failure = none

em full_audit:prefix voce indica o que deverá preceder no formato do arquivo de auditagem, %u indica nome do usuario, %I representa o IP da maquina e %S indica o nome do compartilhamento conforme a tabela a seguir (copiado das manpages do samba):

Variáveis referentes a maquina cliente de rede :

%a Client’s architecture (Samba, WinNT, WfWg, Win95, or UNKNOWN)
%I Client’s IP address
%m Client’s NetBIOS name
%M Client’s DNS name

Variáveis referentes ao usuário :

%g Primary group of %u
%G Primary group of %U
%H Home directory of %u
%u Current Unix username
%U Requested client username (not always used by Samba)

Variáveis referentes ao servidor :

%d Current server process ID
%h Samba server’s DNS hostname
%L Samba server’s NetBIOS name
%N Home directory server, from automount map
%v Samba version

Variáveis miscelaneas :

%R The SMB protocol level that was negotiated
%T The current date and time

Variáveis referentes ao compartilhamento :

%p Automouter’s path to the share’s root directory, if different from %P
%P Current share’s root directory
%S Current share’s name

Em full_audit:sucess e full_audit:failure voce acrescenta os eventos que devem ser registrados quando houver sucesso e/ou falha. No exemplo acima, eu irie auditar apenas renomeação e exclusão de arquivos/pastas.

Como há pouca documentação sobre o módulo “full_audit” então tive que estudar quais eventos no samba poderiam ser auditados, e tive de arrancar isso estudando o código fonte e parecem ser muitos, são eles :
“connect”,”disconnect”,”disk_free” ,”get_quota” ,”set_quota” ,”get_shadow_copy_data” ,”opendir” ,”readdir” ,”mkdir” ,”rmdir” ,”closedir” ,”open” ,”close” ,”read” ,”pread” ,”write” ,”pwrite” ,”lseek” ,”sendfile” ,”rename” ,”fsync” ,”stat”,”fstat” ,”lstat” ,”unlink” ,”chmod” ,”fchmod” ,”chown” ,”fchown” ,”chdir” ,”getwd” ,”utime” ,”ftruncate” ,”lock” ,”symlink” ,”readlink” ,”link” ,”mknod”, “realpath” ,”fget_nt_acl” ,”get_nt_acl” ,”fset_nt_acl” ,”set_nt_acl” ,”chmod_acl” ,”fchmod_acl”, “sys_acl_get_entry” ,”sys_acl_get_tag_type” ,”sys_acl_get_permset” ,”sys_acl_get_qualifier” ,”sys_acl_get_file” ,”sys_acl_get_fd” ,”sys_acl_clear_perms” ,”sys_acl_add_perm” ,”sys_acl_to_text” ,”sys_acl_init” ,”sys_acl_create_entry” ,”sys_acl_set_tag_type” ,”sys_acl_set_qualifier” ,”sys_acl_set_permset” ,”sys_acl_valid” ,”sys_acl_set_file” ,”sys_acl_set_fd” ,”sys_acl_delete_def_file” ,”sys_acl_get_perm” ,”sys_acl_free_text” ,”sys_acl_free_acl” ,”sys_acl_free_qualifier”

Espero que os nomes sejam auto-explicativos para você, pois não há detalhes suficientes para que eu possa explica-los melhor, no entanto, os mais comuns são e também os que testei foram estes :

none = nenhum (usei este em “failure” simplesmente porque queria uma auditagem bem especifica)
all = todos (esse daqui vai registrar tudo, haja espaço em disco)
mkdir = criar diretorio
rmdir = remover diretorio
open = abrir arquivo
close = fechar arquivo
read = ler arquivo
write = gravar arquivo
rename = renomear arquivo
unlink = excluir arquivo
chmod = mudar permissão
chown = mudar o dono do arquivo
connect= mapeamento ou reconexão a uma unidade de rede
disconnect = desconectar uma unidade de rede

Para determinar onde será gravado a auditoria, acrescente ao arquivo /etc/syslog.conf as linhas :

# auditoria samba
local5.notice /var/log/samba/auditoria.log

E também reinicie o servidor de log (syslogd):

/etc/init.d/sysklogd restart

Apesar de existir desde o primórdio do samba3, o módulo audit_full não é muito bem documentado, a menos que voce participe da lista de discussão do samba(em inglês) voce terá pouco acesso a muitos módulos vfs que o samba possui e também módulos de terceiros como o vscan-clamav (antivirus) que juntamente com estes dois módulos citados neste artigo formam a trindade de segurança do samba.


Avatar do usuário
marcelo0786
Global Moderator
Global Moderator
Mensagens: 127
Registrado em: 17 Jun 2013 17:43
Status: Offline

Re:Servidor Samba : Lixeira e Auditoria

Mensagem por marcelo0786 »

Provavelmente com o  tempo o arquivo de auditoria vai ter milhares de linhas de registro no arquivo, o que tornará a tarefa de investigação de possíveis problemas bem complicada, ainda mas se incluir muitas opções para registro de sucesso ou falha. Para facilitar a visualização do arquivo, você pode usar um comando simples no terminal:

sudo cat /var/log/samba-full_audit.log | grep "texto de busca"

Onde "texto de busca" é o que você quer buscar dentro do arquivo.

Agora se você achar mais fácil ler os resultados direto de um arquivo ao invés de ler no terminal, use:


sudo cat /var/log/samba-full_audit.log | grep "texto de busca">log"texto de busca"log


O resultado do comando acima será gravado no arquivo log"texto de busca"log (ou outro nome que você quiser usar).
Responder

Voltar para “Servidores”