Como impedir que o usuário altere arquivos usando a permissão linux

8

É possível, usando o esquema de permissão linux, permitir aos usuários criar arquivos, mas não editá-los ou excluí-los posteriormente? Quero dizer, temos uma pasta de entrega onde os usuários colocam artefatos lá e não queremos que esses artefatos sejam modificados após a entrega, ou seja, editados ou excluídos.

Gilles 'SO- parar de ser mau'
fonte

Respostas:

2

Você não pode fazer isso: se o usuário puder criar arquivos, eles pertencerão a ele e ele poderá modificá-los e apagá-los.

Eu propunha um esquema simples para ter um diretório intermediário (onde o usuário pode fazer o que ele deseja) e um diretório recebido (não acessível ao usuário), com um pequeno programa privilegiado para mover arquivos do diretório intermediário para o recebido diretório. Mas é realmente complicado fazer o certo: entre outras coisas, você precisa cuidar para que o programa privilegiado não mova arquivos em outros diretórios (cuidado com as condições de corrida, links simbólicos ../), não substituirá os arquivos existentes ( rename(3)é atômico, mas pode apagar o destino), não permitirá que o usuário mantenha um descritor de arquivo aberto e modifique o arquivo depois de movido (é melhor copiar do que mover). Em vez disso, vou recomendar uma solução robusta e existente:

  • Peça ao usuário que faça o upload do arquivo por HTTP.
  • Faça com que o usuário se comprometa com um sistema de controle de versão. Ele também poderá cometer novas versões.
Gilles 'SO- parar de ser mau'
fonte
1

É possível, usando o esquema de permissão linux, permitir aos usuários criar arquivos, mas não editá-los ou excluí-los posteriormente?

NÃO

Mas você tem outras opções sugeridas por @Fredrik no comentário à sua pergunta. Veja aqui.

ssapkota
fonte
0

Aqui está uma abordagem que deve, teoricamente, funcionar. É muito esforço desenvolver uma prova de conceito; você pode rejeitá-lo pelo mesmo motivo. E, estritamente falando, isso não está "usando o esquema de permissão do Linux".

  • Obtenha um servidor de arquivos de código aberto.
  • Modifique-o para impor as regras que você deseja (ou seja, os usuários podem criar arquivos nos diretórios aos quais têm acesso de gravação e podem gravar em um arquivo imediatamente após criá-lo, mas, posteriormente, ninguém além do root pode abrir um arquivo para gravar ou desvincular isto).
  • Configure um host de servidor executando seu software de servidor modificado. Teoricamente, poderia ser o seu host local; apenas certifique-se de que o diretório em que está trabalhando não esteja acessível publicamente.
  • O NFS monta o seu /mnt/deliverye diz aos usuários para colocar seus arquivos lá.
Scott
fonte
0

A resposta simples é executar um script em um determinado intervalo que você escolher (digamos a cada 15 minutos) que atribui novamente a propriedade de todos os arquivos no diretório "upload" a um usuário "admin" predeterminado e defina as permissões para "644". Isso permitirá que todos os usuários tenham acesso somente leitura a todos os arquivos no diretório de upload, incluindo aqueles que eles mesmos carregaram. Obviamente, você pode otimizar o script após a primeira execução para pesquisar apenas esses arquivos com datas criadas após a execução anterior do script (digamos nos últimos 17 minutos).

Michael Yaeger
fonte