Como posso fazer uma visualização somente de gravação de uma pasta?

11

Eu quero ter um lugar no sistema de arquivos que apresente uma "visão" somente de gravação de outra pasta para a qual tenho acesso de leitura / gravação.

Estou imaginando algo que é semelhante em comportamento a uma caixa suspensa de FTP, em que os arquivos podem ser copiados, mas não lidos, por exemplo:

$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c

write-only-view/:

$ cp d write-only-view/
$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c  d

write-only-view/:

É importante que isso funcione como no exemplo - o conteúdo ainda é visível quando acessado por read-write-view/ e as duas "visualizações" são funcionais para um único usuário.

Como posso definir algo assim? Algum arranjo inteligente de elos simbólicos, talvez? Ou uma configuração incomum de uma montagem de ligação?

    
por ændrük 09.05.2012 / 04:15

8 respostas

1

Use bindfs , que é projetado para "montar um diretório em outro local e alterar os bits de permissão".

Comece com uma pasta normal que tenha acesso de leitura e gravação:

$ mkdir read-write-view && touch read-write-view/{a,b,c}
$ ls read-write-view
a  b  c

Use bindfs para montar a pasta sem acesso de leitura:

$ mkdir write-only-view
$ sudo bindfs --perms=a-r read-write-view write-only-view

Verifique se apenas o conteúdo da pasta original pode ser listado:

$ ls read-write-view write-only-view
read-write-view:
a  b  c
ls: cannot open directory write-only-view: Permission denied

Verifique se a pasta original pode ser gravada na montagem:

$ echo 'Can you read this?' > write-only-view/d
$ cat read-write-view/d
Can you read this?

Verifique se os arquivos não podem ser lidos pela montagem:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied
    
por ændrük 19.03.2013 / 16:40
1

Você pode conseguir isso configurando as permissões na pasta de modo que os usuários de destino tenham acesso de gravação à pasta, mas sem acesso de leitura.

Por exemplo, para permitir que qualquer pessoa grave em uma pasta, mas não liste seu conteúdo, você pode fazer o seguinte:

chmod o=wx folder

Ou para dar a um grupo específico de usuários esse acesso:

chgrp groupname folder
chmod o=,g=wx folder

Agora, esses usuários não poderão listar o conteúdo da pasta, mas poderão colocar arquivos na pasta:

$ ls folder
ls: cannot open directory folder: Permission denied
$ touch folder/filename

Isso não faz tudo o que você quer, desde que os usuários ainda possam acessar os arquivos na pasta se puderem adivinhar o nome. Você pode minimizar esse risco por meio de um cron job que move regularmente os arquivos para fora da pasta da caixa suspensa para um local ao qual outros usuários não têm acesso.

    
por James Henstridge 09.05.2012 / 06:44
1

Eu fiz essa mesma pergunta para os alunos na lista de discussão do samba há alguns anos atrás (http://lists.samba.org/archive/samba/2008-September/143610.html) e a resposta funcionou para nos. Você precisa de atributos de acl estendidos em seu sistema de arquivos (do pacote acl), aqui está a resposta de Jeremy Allison ...

  

Ok, o problema é que os alunos precisam ler   o diretório contendo, a fim de ser capaz de arrastar e   Solte novos arquivos lá. A razão é que o Samba precisa   ser capaz de digitalizar o diretório em seu nome, a fim   para fazer pesquisas insensíveis a casos.

     

Mas desde que você não se importe em permitir que os alunos   ver os nomes dos outros arquivos, você pode configurar um   DropBox para que os alunos possam escrever nele (e   próprios arquivos), mas não editar ou ver outros arquivos.

     

Primeiramente, você quer ter certeza de que os arquivos criados   o diretório DropBox não é de propriedade do aluno   grupo principal, mas pelo proprietário do grupo do DropBox   direcotria. Então:

     

professores do chgrp DropBox

     

para torná-lo de propriedade do grupo de professores. Em seguida, defina o   setgid bit no diretório do DropBox para ter certeza   que os arquivos criados nele têm um grupo proprietário   de professores.

     

chmod g + s DropBox

     

Em seguida, verifique se um arquivo no DropBox pode ser renomeado   ou excluído apenas pelo proprietário do arquivo ou pelo   proprietário do diretório ou por raiz (mesmas permissões   que / tmp tem).

     

chmod + t DropBox

     

Depois, permita que os alunos escrevam no diretório   adicionando uma ACL

     

setfacl -m g: alunos: rwx DropBox

     

Desde que o acl defaul seja definido de modo que "outros"   não tem permissões, arquivos escritos por um aluno   para esse diretório será propriedade de si   mas terá um grupo de "professores", e   os alunos não poderão ler uns aos outros   arquivos.

     

Se você precisar fazer com que os arquivos sejam de propriedade   pelo dono do diretório, não pelos alunos   quem os criou você precisa configurar um separado   compartilhar conforme descrito acima, mas adicione o   Parâmetro de nível de compartilhamento:

     

herdar proprietário = sim

     

que fará com que arquivos criados dentro do   diretórios em que a ação a ser propriedade de   o diretório que contém, não a criação   proprietário.

    
por user55604 15.05.2012 / 20:21
1

Você pode criar uma pasta-depósito "somente leitura-escrita" com acesso rw e usar o cronjob ou a notificação inode para mover o conteúdo para a outra "visualização de leitura e gravação".

    
por jet 19.05.2012 / 00:15
1

Eu acredito que você poderia simplesmente usar truques de montagem de bind, em /etc/fstab :

/path/to/read-write-view /path/to/write-only-view none bind 0 0

Então, você provavelmente poderia então:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
    
por Glen 19.05.2012 / 17:33
0

Primeiro, é mais fácil pensar nisso ao contrário. Você tem uma pasta que é rw para quem precisa de acesso de gravação e uma "view" somente leitura desta pasta para aqueles que precisam de acesso somente leitura.

Eu nunca consegui fazer com que a opção mount --bind -o ro funcionasse corretamente. A maneira mais confiável de fazer isso é usar o nfs. Adicione o seguinte ao / etc / exports

/path-to-folder/folder 127.0.0.1(secure,ro,no_root_squash)

monte a "view" somente leitura com

mount -o ro 127.0.0.1:/path-to-folder/folder /read-only-folder

Agora você deve ter uma visualização somente de leitura da sua pasta original.

Suponho que você poderia fazer o mesmo com o samba / cifs, mas isso só faria sentido para o acesso à rede.

Esta solução foi inspirada em ( roubado de ) este Howto . Espero que ajude.

    
por Chris 12.05.2012 / 10:10
0

Eu não acho que isso seja possível, já que você tem que ler um disco "somente gravação" para exibir o conteúdo.

Se eu vendesse esse dispositivo, como alguém poderia verificar se funcionou? Talvez este seja um para o kickstarter.

    
por gecko 19.05.2012 / 18:32
0

Isso não é uma resposta, mas é realmente mais um pensamento e possivelmente outra pergunta. Para mim isso soa como se pudesse ser implementado através de algum tipo de gancho ou gatilho.

Algum programa em segundo plano pode assistir à pasta somente para gravação (não por polling, ele pode ser notificado com FAM ou algo assim) e, em seguida, mova cada arquivo para fora da pasta somente leitura assim que aparecer.

    
por MPi 24.10.2012 / 08:45