Servidor Samba: Lixeira

Um recurso que muitos administradores de sistemas sonham em implementar em seus servidores, é uma lixeira de rede.

O funcionamento básico dela seria armazenar arquivos que usuários apagam via rede, evitando com isso que o administrador tenha que ficar rodando rollbacks sempre que alguém comete um erro e toca fogo em um arquivo “importante”.

Afinal, para todos os usuários, todos os arquivos deletados são “importantes”. Ele nunca deleta algo de que não precisa. E isso é um fato!

Mas, para que o administrador possa dormir tranqüilo, há um meio simples de se fazer esta implementação.


Eu subentendo que você já está com o Samba instalado e rodando perfeitamente e que apenas quer habilitar a lixeira nele. Para tal, antes de qualquer coisa, veja se os arquivo “recycle.so” está no diretório /usr/lib/samba/vfs, pois sem este arquivo este tutorial não servirá para absolutamente nada!

Implementando a lixeira na rede

Crie um diretório que será a lixeira para sua rede Samba:

mkdir -p /var/spool/samba/lixeira

O nome do diretório é você que irá definir. Caso você queira que os seus usuários tenham acesso à lixeira (não recomendo por questões de segurança), basta dar permissão global neste diretório e criar links simbólicos diretamente para o diretório escolhido.

Agora que você já criou o local em que será a sua lixeira, está na hora de sujar as mãos com um pouquinho de código.

Edite o arquivo /etc/samba/smb.conf e acrescente as linhas abaixo na sessão [Global] se a lixeira for ser utilizada para todos os volumes compartilhados ou, então, apenas em um dos seus [compartilhamentos]:

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

Algumas explicações sobre o que foi feito acima:

recycle:facility = LOCAL1
recycle:priority = NOTICE

Isso significa que um arquivo de log será usado para registrar a movimentação da sua lixeira.

Esse log é gravado por meio do syslogd do seu sistema, e você vai ter que configurá-lo manualmente.

Quando tentei fazer isso pela última vez eu não consegui. Os logs não eram criados. Acredito eu que o módulo “recycle“, apesar de ter a opção, não gere os logs.

recycle:maxsize = 0

Nesta linha de código você limita o tamanho de cada arquivo que poderá ser armazenado na lixeira. O número zero, como no exemplo, significa que não tem limite. Ou seja, qualquer arquivo, de qualquer tamanho, poderá ficar lá.

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

Neste código, você informa ao Samba em qual endereço está a sua lixeira. A tag %U é o nome do seu usuário. Com isso, você garante que todos os arquivos deletados pelo usuário A só estarão acessíveis a ele mesmo.

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

Aqui você determina as permissões dos diretórios. Além disso, aqui você define também se o Samba deverá guardar o nome do diretório de onde o arquivo fora excluído (keeptree) e se a data do arquivo deletado vai ser alterada para a data da exclusão (touch).

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

Aqui é algo que é necessária uma dose de atenção e cautela. Você está definindo aquilo que não será armazenado na lixeira em hipótese alguma. Significa dizer que o que estiver ali nestas regras, será deletado de vez, e nunca passará pela lixeira. Use este recurso com cautela para não ter dores de cabeça extras no futuro.

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

Aqui, este código faz o seguinte:

versions: verifica a existência do arquivo na lixeira, e caso exista um arquivo com o mesmo nome, ele cria uma cópia dele e armazena ambos. Assim sucessivamente, enquanto o seu usuário não parar de deletar arquivos de mesmo nome.

noversion: este é exatamente o contrário do anterior. Tudo o que estiver neste parâmetro irá sobrescrever o anterior. Significa dizer que se o usuário excluir mais de um arquivo com o mesmo nome, somente o último estará lá, guardadinho para ele. E baubau para o primeiro.

The End.

Bem, espero que este artigo tenha alguma serventia. Eu senti muita falta de algo assim quando precisei fazer uma implementação desta em um cliente, e não encontrei nada muito simples pela Internet. Este script já tenho aqui guardadinho há algum tempo, e resolvi postá-lo, pois, com certeza, existem outras pessoas com esse mesmo problema, visto que há pouquíssima informação sobre o assunto.

IMPORTANTE: Este artigo contém informações sobre como modificar o Sistema. Antes de modificá-lo, faça um backup e certifique-se de que saiba como restaurá-lo caso ocorra algum problema.

Observe que as informações neste artigo são fornecidas apenas para fins de suporte e solução de problemas de produto.

O GGTY não se responsabiliza por quaisquer danos causados em decorrência desta dica. Siga-a sob sua conta e risco.




About the author

Consultor de TI e fotógrafo amador nas horas vagas

Faça o seu comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>