Gostaria de dar permissões de usuário para criar e ler arquivos em um diretório específico, mas não para modificar ou excluir arquivos. Se o usuário puder anexar aos arquivos, tudo bem, mas prefiro não. Isso é no Ubuntu Linux.
Eu acho que isso é impossível com permissões de arquivo Unix padrão, mas talvez isso seja possível usando ACLs? O usuário sempre estará se conectando usando SFTP; portanto, se houvesse alguma maneira de controlar isso no SFTP (ao contrário das permissões do SO), tudo bem.
Para ser absolutamente claro, quero o seguinte:
- echo hello> test # é bem-sucedido, porque o teste não existe e a criação é permitida
- echo hello >> test # pode ter êxito ou falhar, dependendo se o acréscimo é permitido
- echo hello2> test # falha, porque o teste já existe e a modificação não é permitida
- teste de gato # foi bem-sucedido, porque leituras são permitidas
- rm test # falha, porque a exclusão não é permitida
Se você está se perguntando por que eu quero fazer isso, é para tornar um sistema de backup Duplicati resistente ao Ransomware.
linux
files
permissions
acl
paj28
fonte
fonte
echo > test
, o shell faz umopen("test", O_WRONLY|O_CREAT|O_TRUNC)
que cria o arquivo e depois invocaecho
que grava o conteúdo para modificá-lo. Agora você pode permitir que apenas a primeira abertura (WR) seja bem-sucedida.Respostas:
Você poderia usar
bindfs
como:Esse diretório é de propriedade do stephane, com o grupo stephane (sendo o único membro o stephane). Observe também o
t
que impede os usuários de renomear ou remover entradas que não são de sua propriedade.Nós
bindfs
dir
nos superamos com propriedade e permissões fixas para arquivos e diretórios. Todos os arquivos parecem pertencentes aroot
(embora por baixo do diretório real ainda sejam de propriedade de stephane).Diretórios obtêm
drwxrwxr-x root stephane
permissões enquanto outros tipos de arquivos obtêm-rw-r--r-- root stephane
outros.Agora, a criação de um arquivo funciona porque o diretório é gravável:
No entanto, não é possível fazer uma segunda gravação
open()
nesse arquivo, pois não temos permissão:(observe que não é permitido anexar lá (como parte dos seus requisitos iniciais)).
Uma limitação: enquanto você não pode remover ou renomear entradas por
dir
causa dot
bit, os novos diretórios criados nele não terão esset
bit; portanto, você poderá renomear ou excluir entradas lá.fonte
A
chattr +a
opção permitirá anexar apenas. Os arquivos podem ser alterados dessa maneira, mas apenas adicionando (ou seja, acrescentando linhas) a eles. Você não pode excluir arquivos existentes, mas criar novos. Isso pode atender às suas necessidades:a partir de
man chattr
(observe que isso também se aplica a diretórios)
Portanto, sua lista seria semelhante a:
fonte
chattr +a
então eu posso criar um arquivo, não tenho permissão para removê-lo, posso acrescentar. Se eu criar dir1 / dir2 então eu posso fazer o que quiser IN dir2