Dropfolder do Linux em que os usuários não podem excluir arquivos

1

Estou trabalhando em um projeto de servidor de arquivos para a escola e estou usando o samba para compartilhar as pastas. Eu tenho brincado com as permissões de pasta, mas não consigo descobrir como fazer uma gota apenas como pasta. Isso é o que eu quero alcançar:

  • Proprietário (conta do servidor): controle total (chmod number 7xx)
  • Grupo (usuários que se conectam ao servidor samba): Coloca apenas arquivos (soltos), portanto, isso significa não abrir / editar / excluir arquivos na pasta (chmod number x?x)
  • outros: sem acesso (chmod number xx0)

Eu tentei várias configurações chmod diferentes, mas nunca consegui o resultado desejado. Isso é possível? Eu pesquisei muito, mas não consegui encontrar uma resposta conclusiva.

Talvez seja uma maneira de definir permissões em arquivos sempre que eles são colocados na pasta?

Se você precisar de mais informações sobre a configuração do samba ou qualquer outra coisa, por favor, pergunte!

Obrigado por ajudar!

    
por Bram 28.09.2014 / 21:01

2 respostas

1

Tente este procedimento.

Crie uma pasta compartilhada e conceda a permissão correta:

  mkdir /pathYouWant/share
  chmod 770 /pathYouWant/share

Isso não dá acesso a outro.

  chmod +t /pathYouWant/share

Este modo, de acordo com a página de manual chmod :

   The  restricted  deletion  flag  or  sticky  bit is a single bit, whose
   interpretation depends on the file type.  For directories, it  prevents
   unprivileged  users  from  removing or renaming a file in the directory
   unless they  own  the  file  or  the  directory

Como dito por Marty Fried, os arquivos criados na pasta de compartilhamento devem ter as permissões certas e isso pode ser obtido com masks de compartilhamento de samba em smb.conf :

  create mask = 440
  directory mask = 550

Os programas do Windows não devem tentar remover arquivos somente leitura, a menos que a opção delete readonly esteja configurada como sim.

  delete readonly = no

Além disso, se você quiser ocultar todo o arquivo na pasta de compartilhamento:

  veto files = /*/
  delete veto files = no

De acordo com o manual do samba, esta diretiva:

  

O que acontece se o usuário tentar excluir um diretório que contenha   vetou arquivos? É aí que entra a opção excluir arquivos de veto.   esta opção booleana está definida como sim, o usuário pode excluir tanto o   arquivos regulares e os arquivos vetados no diretório e no diretório   em si é removido. Se a opção estiver definida como não, o usuário não poderá excluir   os arquivos vetados e, consequentemente, o diretório não é excluído   ou. Do ponto de vista do usuário, o diretório aparece vazio, mas   não pode ser removido.

Após essa configuração, o único problema que resta é que o usuário ainda pode excluir seus próprios arquivos, mesmo que não os veja (não está claro para nós o porquê).

Então, decidimos seguir a sugestão_Seppi para concluir a tarefa e Bram Driesen fez um script que altera a propriedade do arquivo para o PC host.

Ele usou incron para disparar o script sempre que um arquivo é colocado na pasta, seguindo este como guia para configurá-lo.

    
por Lety 30.09.2014 / 13:35
1

Infelizmente, o seu problema não é solucionável com tanta facilidade. Se um usuário tiver permissão de gravação em um diretório, ele também poderá excluir arquivos. Mesmo que ele não fosse capaz de apagá-los, ele ainda poderia preencher um arquivo com zeros, o que seria uma exclusão de dados, mas não do nó do sistema de arquivos.

Uma ideia que usei uma vez:

Você cria um cronjob, que remove seletivamente a permissão de gravação de todos os arquivos em uma árvore de diretórios (como todos os arquivos em /home/guest ).

Note que você não pode simplesmente usar chmod g-w -R /home/guest . Isso também tiraria o bit de gravação dos diretórios, impossibilitando a colocação de novos arquivos. Então, você precisaria fazer uma iteração em todos os arquivos e remover o bit de gravação do grupo.

O intervalo da execução do cronjob depende de você - na época, eu o defini para 10 minutos. Eu não conheço seu ambiente, então não posso lhe dar uma recomendação.

Infelizmente, eu não tenho mais esse script, então você terá que fazer alguns scripts bash para fazê-lo funcionar. Mas, falando sério, duvido que este seja um método eficiente.

    
por s3lph 28.09.2014 / 22:58