Lixeira no Samba

Em qualquer servidor de arquivos, a principal prioridade é assegurar a integridade e a segurança dos dados. Entretanto, por mais estável que seja a rede e por mais robusto que seja o servidor, o elo mais fraco da cadeia acaba sendo sempre o usuário. De nada adianta um servidor perfeitamente estável se ele deleta um arquivo importante sem querer.

Pensando nisso, o Samba oferece a opção de usar uma lixeira, que pode lhe poupar muita dor de cabeça em diversas situações. Isso é feito através da opção “vfs object = recycle“, que cria uma lixeira dentro de cada pasta compartilhada, que passa a armazenar todos os arquivos deletados. Isso previne a remoção acidental de arquivos, já que o usuário passa a precisar deletar o arquivo e em seguida limpar o conteúdo da lixeira para realmente removê-lo, o que é o comportamento esperado por muitos.

Por padrão, os arquivos deletados vão para a pasta “.recycle” (dentro do compartilhamento), mas o nome pode ser alterado através da opção “recycle:repository = lixeira” (onde o “lixeira” é o nome desejado, que pode ser qualquer um). Quando uma pasta é deletada, o padrão é simplesmente misturar todos os arquivos no diretório raiz da lixeira, mas isso pode ser evitado adicionando a opção “recycle:keeptree = yes”. Aqui temos mais um exemplo de compartilhamento, incluindo as três opções:

[projetos]path = /mnt/sda2/projetos
writable = yes
valid users = +apolo, isac
vfs object = recycle
recycle:repository = lixeira
recycle:keeptree = yes

Outra opção útil é a “recycle:versions”, que faz com que a lixeira mantenha diferentes versões do mesmo arquivo, em vez de manter apenas a última versão. Os arquivos repetidos passam então a ser renomeados para “Copy #1 of Samba.sxw”, “Copy #2 of Samba.sxw” e assim por diante.

recycle:versions = yes

Com isso, você passa a dormir um pouco mais tranquilo a noite e se salva (na maior parte dos casos) de precisar recuperar arquivos acidentalmente deletados a partir de backups. É preciso apenas se lembrar de verificar o conteúdo das lixeiras de vez em quando e limpar as pastas quando elas começarem a consumir muito espaço em disco. Você pode inclusive deletar a pasta da lixeira inteira, pois ela é recriada automaticamente quando o próximo arquivo for deletado.

m7396342e

Uma opção para reduzir o problema do espaço desperdiçado é centralizar todas as lixeiras em uma única pasta. Isso permite inclusive que você utilize uma partição ou um HD separado para armazenar os arquivos da lixeira, sem correr o risco de ela crescer até ocupar todo o espaço disponível na partição principal. Para isso, usamos a opção “recycle:repository”, seguida da pasta a ser utilizada (que deve ser criada previamente), como em:

recycle:repository = /var/samba/trash/

Como adicionamos o caminho completo (em vez de usar “recycle:repository = lixeira”, como no exemplo anterior), a opção pode tanto ser adicionada individualmente em cada compartilhamento quanto ser especificada apenas uma vez na seção [global], o que faz com que a lixeira passe a ser automaticamente usada para arquivos deletados em todos os compartilhamentos do servidor.

Centralizar todos os arquivos em uma única pasta criaria uma grande confusão, já que ela misturaria arquivos deletados por todos os usuários. Uma solução é adicionar a variável “%U”, que faz com que os arquivos sejam organizados em várias subpastas, separados por usuário (as subpastas usadas por cada usuário são criadas automaticamente conforme necessário). Nesse caso a opção fica:

recycle:repository = /var/samba/trash/%U

O problema em usar essa opção é que os usuários deixam de ver a lixeira, já que ela passa a ficar em uma pasta separada. Uma solução para o problema é criar um novo compartilhamento, que permite que cada usuário veja sua lixeira particular. Para isso, iremos novamente usar a variável “%U”:

[lixeira]path = /var/samba/trash/%U
writable = yes

Usei a opção “writable = yes” para permitir que o próprio usuário possa limpar a lixeira quando quiser, mas isso é opcional. Vale lembrar que para que o usuário consiga limpar os arquivos da lixeira, é necessário que ele tenha permissão de escrita para a pasta “/var/samba/trash/”. Nesse caso, você tem a opção de simplesmente abrir as permissões da pasta (chmod 777), ou ajustar manualmente as permissões da sub-pasta de cada usuário, como em:

# chown -R joao:joao /var/samba/trash/joao

Mais uma medida útil para evitar desperdício de espaço é bloquear a gravação de arquivos de backup e de arquivos temporários na lixeira, já que eles costumam ser numerosos e raramente são importantes. É saudável bloquear também arquivos .iso (que são tipicamente muito grandes), de forma que eles sejam também deletados diretamente. As extensões de arquivos são especificadas através da opção “recycle:exclude” e nomes de pasta através da opção “recycle:exclude_dir”, como em:

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

Assim como a “recycle:repository”, as demais opções da lixeira podem tanto serem especificadas individualmente dentro de cada compartilhamento quanto diretamente dentro da seção [global], o que é naturalmente o mais simples caso você deseje ativá-la para todos os compartilhamentos. O default do Samba 3 é manter todas as opções desativadas, de forma que a lixeira só é usada quando as opções são especificadas.

Um exemplo de configuração, com a lixeira ativa dentro da seção [global], dois compartilhamentos de arquivos e mais o compartilhamento que dá acesso à pasta central da lixeira por parte dos usuários seria:

[global]netbios name = Phanteon
server string = Servidor com lixeira
workgroup = Grupo
local master = yes
os level = 100
preferred master = yes
wins support = yes

vfs objects = recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:repository = /var/samba/trash/%U
recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, cache

[engenharia]path = /mnt/sda2/engenharia
writable = yes
valid users = +engenheiros

[gerencia]path = /mnt/gerencia
writable = yes
valid users = paulo, rebeca
hosts allow = micro3, micro4
browseable = no

[lixeira]path = /var/samba/trash/%U
writable = yes

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X