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.

Conclusão :

Esse artigo foi para ajudar àqueles que estiverem trilhando o mesmo caminho que passei quando começei a usar o samba3, mas o problema de escrever artigos como este é que muita gente confunde os comentários dum blog com “forum técnico” e acaba esperando respostas que não existirão. Eu raramente respondo perguntas nos comentários, se outros quiserem faze-lo não há problema nenhum, mas recomendo que se use de listas de discussão para tirar tais dúvidas.

Anúncios
  1. #1 por Kill ABC em 16 \16\UTC agosto \16\UTC 2007 - 12:09

    Excellente esse teu artigo, vai me ajudar aqui também, pois to começando implantar um servidor samba no capricho aqui.

  2. #2 por Luciano em 17 \17\UTC agosto \17\UTC 2007 - 16:21

    Grande Hamacker,

    Sei que vc tbm está procurando um cliente de torrent legal. Estou testando este:
    http://transmission.m0k.org/

    Até agora parece bom. Faz um teste.

    Valeu pelas dicas. Sempre acabo achando algo bom no seu blog.

  3. #3 por Steve em 24 \24\UTC setembro \24\UTC 2007 - 12:07

    Cara, simplesmente “DUCARALHO” o artigo!
    Muito bem explicado, passo-a-passo, e funcionou 100% aqui!
    Parabens e obrigado por compartilhar.

  4. #4 por John MacLaine em 2 \02\UTC outubro \02\UTC 2007 - 18:58

    Excepcional!!! Muito bem explicado, meus parabéns…

  5. #5 por Yvonne Magalhães em 15 \15\UTC novembro \15\UTC 2007 - 16:53

    Eu gostava muito de falar sobre a lixeira na rua porque tem muito interesse e eu preciso para área de projecto.

  6. #6 por Ednilson - Lins/SP em 21 \21\UTC dezembro \21\UTC 2007 - 17:05

    Excelente Artigo, funcionou perfeitamente no meu RHEL5 ! Parabens !

  7. #7 por Guaracy Tesch em 28 \28\UTC março \28\UTC 2008 - 13:31

    Muito bem explicado! Tem que ensinar a pescar e não dar o peixe.
    Grande Abraço.

  8. #8 por Túlio Henrique em 19 \19\UTC setembro \19\UTC 2008 - 10:57

    utilizo a syslog-ng, qual a configuração que coloco nele para funcionar? tentei a mencionada acima e nao funcionou!

  9. #9 por Rafael em 23 \23\UTC setembro \23\UTC 2008 - 11:56

    Olá,

    fiz conforme falou no artigo, porém não funciono o que pode ser?

    minhas configurações estão assim:

    [global]
    workgroup = meudominio
    server string = Samba Server
    printcap name = /etc/printcap
    load printers = yes
    printing = cups
    hosts deny = 192.168.2.252
    cups options = raw
    guest account = nobody
    log file = /var/log/samba/%m.log
    log file = /var/log/samba/%u.log
    max log size = 512
    security = user
    encrypt passwords = yes
    smb passwd file = /etc/samba/smbpasswd
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    local master = yes
    os level = 99
    domain master = yes
    preferred master = yes
    domain logons = yes
    file per username
    logon script = %U.bat
    wins support = yes
    dns proxy = no
    admin users = connection
    time server = yes
    ################################
    #######Lixeira##################
    vfs objects = recycle
    recycle:facility = LOCAL1
    recycle:priority = NOTICE
    recycle:maxsize = 0
    recycle:repository = /dados/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
    ####################################
    ########## Auditoria ###############
    vfs objects = full_audit
    full_audit:facility = LOCAL5
    full_audit:priority = NOTICE
    full_audit:prefix = %u|%I|%S|%G
    full_audit:success = rename rmdir unlink
    full_audit:failure = none
    [homes]
    comment = Home Directories
    browseable = no
    writable = yes
    available = yes

    [netlogon]
    comment = Network Logon Service
    browseable = no
    path = /home/netlogon
    guest ok = yes
    writable = no
    share modes = no
    browseable = no
    available = yes
    directory mask = 0775

    [printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    public = yes
    guest ok = no
    writable = no
    printable = yes

    [Geral]
    comment = Dados
    available = yes
    browseable = yes
    path = /dados/geral
    public = yes
    writable = yes
    read only = no
    create mask = 0777
    directory mask = 0777
    force create mode = 0777

    [operacional]
    comment = Operacional
    path = /dados/operacional
    browseable = yes
    valid users = @operacional, @diretoria, @administrativo
    read list = @operacional, @diretoria, @administrativo
    write list = @operacional, @diretoria
    force group = operacional
    read only = No
    create mask = 0774
    directory mask = 0775
    force create mode = 0777

    Porém a lixeira nao está funcionando, o que pode ser?

  10. #10 por Dario kkk em 17 \17\UTC março \17\UTC 2009 - 11:42

    Rafael, não está funcionando pelo seguinte motivo…
    Você tem duas linhas separadas com a opção
    vfs objects, ambas na seção global. Se fizer um testparm -v |grep vfs, verá que apenas uma foi assumida pelo samba. O correto é especificar tudo na mesma linha se você estiver utilizando vários módulos vfs (como auditoria e lixeira juntas no seu caso). Deveria haver apenas uma linha assim:
    vfs objects = full_audit recycle
    Os demais parâmetros para cada módulo continuam da mesma maneira. A única ressalva para lixeira e auditoria juntos é que o que seria unlink (arquivos deletados), aparecerá na log como rename (para o arquivo de destino da lixeira).

  11. #11 por sidnei lima em 11 \11\UTC abril \11\UTC 2009 - 17:12

    Caro amigo, fiz tudo certinho, mas não está funcionando, inclusive coloquei os parametros no diretório home para ver se era isso..mas não funcionou tb, os usuarios não são criados dentro da lixeira, pode me ajudar por favor? segua abaixo o meu arquivo;

    [global]
    workgroup = linux
    netbios name = debian
    server string = Samba PDC
    keepalive = 300
    deadtime = 10
    username level = 1
    logon script = %U.bat
    logon path =
    # logon drive = j:
    domain logons = yes
    os level = 100
    prefered master = yes
    domain master = yes
    security = user
    socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
    passwd program = /usr/bin/passwd %u
    passwd chat = “*New*UNIX*password*” %n\n “*Retype*new*UNIX*password*” %n\n” *passwd:*all*authentication*tokens*updated*succe$

    [homes] # Diretorio do Usuario
    path = /home/%U
    comment = Home Directories
    browseable = no
    writeable = yes
    available = yes
    vfs objects = recycle
    recycle:facility = LOCAL1
    recycle:priority = NOTICE
    recycle:maxsize = 0
    recycle:repository = /var/spool/samba/lixeira
    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

    [netlogon]
    comment = Servico de logon
    path = /etc/samba/netlogon
    guest ok = yes
    browseable = no

    [rede]
    path = /home/rede
    available = yes
    writable = yes
    # valid users = yes
    # hosts allow = yes
    guest ok = yes
    browsable = yes
    public = yes

    Obrigado! aguardo sua resposta…

  12. #12 por krum em 29 \29\UTC abril \29\UTC 2009 - 14:36

    Mande seu smb.conf para dar uma olhada o meu tb não funciona .. agradeço desde já..

  13. #13 por krum em 29 \29\UTC abril \29\UTC 2009 - 15:23

    era permissão na pasta da lixeira.. foi só colocar permissão pro usuario certo que funfo blzinha…

  14. #14 por Dennis em 30 \30\UTC abril \30\UTC 2009 - 23:55

    Caros amigos,

    Fiz alguns testes antes de ver o howto do colega e vi que a auditoria e o sistema de lixeira do samba NÃO funciona “juntos”… testei eles separadamente e funciona perfeitamente…! quem tiver esse problema (os que citaram acima!) faça tbm o mesmo teste p/ tirar a prova dos “9”.. hehehe

    estou testando na versao (3.2.5)!

    ate+!

  15. #15 por Adenir em 12 \12\UTC junho \12\UTC 2009 - 17:27

    Funciona sim, basta fazer como foi indicado na resposta 10:
    vfs objects = full_audit recycle
    as variaveis devem ser setadas juntas senão o samba aceita apenas a primeira.
    Encontrei este tutorial equanto procurava uma solução para esse problema e só achei graças ao seu comnetario.
    Abrigado Dennis, Rafael e Dario kkk

  16. #16 por Paulo Candido em 28 \28\UTC agosto \28\UTC 2009 - 10:41

    Ola, com relacao a lixeira eu segui exatamente o que esta aqui no site e nao consegui. Estudei bem e vi que tudo estava certo exceto a variavel object e sem o “s” aqui o autor coloco objecto no plural, ok.. boa sorte

  17. #17 por Paulo Candido em 28 \28\UTC agosto \28\UTC 2009 - 10:56

    Amigo pensei que fosse o object no plural mas nao e. Fiz o teste do comentario da linha 10 e nao funciona, quando eu tiro o full_audit funciona, oxente… Uso o testparm dito acima e veja o que acontece:

    deb5-pdc:/var/log# testparm -v | grep vfs
    Load smb config files from /etc/samba/smb.conf
    Processing section “[netlogon]”
    Processing section “[home]”
    Processing section “[instala]”
    Processing section “[siloms6]”
    Processing section “[lixeira]”
    Processing section “[prog]”
    Processing section “[kix32]”
    Loaded services file OK.
    Server role: ROLE_DOMAIN_PDC
    Press enter to see a dump of your service definitions

    vfs objects = full_audit, recycle

    essa linha cima nao deveria aparecer Um detalhe a virgula separando os dois comando foi colocado por conta do testparm. Grato

  18. #18 por Kiriath em 31 \31\UTC agosto \31\UTC 2009 - 12:36

    Show de bola o artigo do companheiro. Show tambem são os comentarios, onde pode-se tirar algumas duvidas não contempladas no artigo.
    A minha lixeira e a auditoria não funcionavam juntos só pelo motivo citado no comentario 10. Valeu.

  19. #19 por Luiz Tedesco em 28 \28\UTC outubro \28\UTC 2009 - 18:27

    O meu funcionou blz, parabéns pelo artigo.
    Inclusive juntos.

  20. #20 por Eduardo em 22 \22\UTC dezembro \22\UTC 2009 - 11:12

    Amigo, muito bom esse artigo, esta funcionando perfeitamente, só tem um detalhe, o meu arquivo quando vai para a lixeira eu perco o conteudo eu abro ele e o arquvio esta com esses caracteres ÐÏࡱá.
    Se puder me ajudar ficarei muito grato.
    Eduardo

  21. #21 por pissolato em 23 \23\UTC fevereiro \23\UTC 2010 - 11:46

    Galera estou com um probleminha aqui, é o seguinte: estou configurando uma lixeira no samba, e fiz com que todos os arquivos excluidos em qualquer diretorio fossem para o direitorio novo (“…/lixeira”, que eu criei) sendo assim, cada arquivo deletado ficaria dentro da pasta do usuario ex: se “joao” deleta o arquivo “teste.txt”, o diretorio do arquivo deletado ficaria em (…/lixeira/joao/teste.txtx) (somente root tem acesso a “/lixeira” ate ai td bem.
    o problema e que acontece uma coisa muito louca quando o usuario desloga do dominio (faz logoff do pc por ex), a pasta profile do usuario aparece dentro de “/lixeira/%U” ou seja, esta deletando a pasta “profile” do usuario, que confusao! alguem sabe como faco pra parar de deletar as pastas dos perfis dos usuarios?? vou postar as configuracoes relevantes do meu samba aqui que possam ajudar:

    (uso samba como PDC versao 3.2.12 no slackware 13.)

    [global]

    vfs objects = recycle
    recycle:maxsize = 100000000
    recycle:noversions = .doc| .xls| .ppt|.jpg| .mpeg| .mp3
    recycle:version = true
    recycle:touch = true
    recycle:keeptree = true
    recycle:exclude = *.tmp *.temp *.0 *.obj ~$*
    recycle:exclude_dir = tmp, cache, profile
    recycle:repository = diretorio…/lixeira/%U
    admin users = “usuarios”

    [lixeira]
    path = diretorio…/lixeira
    valid users = “mesmos usuarios admin”
    read only = no
    create mask = 0777
    force create mask = 0666
    directory mask = 0777
    force directory mode = 0777…
    ————————————————————————-
    na linha “recycle:exclude_dir = tmp, cache, profile”
    esse “profile” foi por minha conta hehe (foi uq conseguir pensar :P) deu +- certo, o que acontece e simplesmente nao passar pela lixeira pastas com nome “profile”, exclui permanentemente. Resolveria, mas nao quero solucoes grotescas, “gambiarras”, alem de correr o risco de perder informacoes do usuario, “deletando” o perfil dele dessa forma, se alguem tiver uma forma menos arriscada ai me ajudem por favor, obrigado!!! urgente ^^ valeu!

%d blogueiros gostam disto: