Je voudrais donner à un utilisateur des autorisations pour créer et lire des fichiers dans un répertoire particulier, mais pas pour modifier ou supprimer des fichiers. Si l'utilisateur peut ajouter des fichiers, c'est correct, mais je préfère ne pas. C'est sur Ubuntu Linux.
Je pense que cela est impossible avec les autorisations de fichier Unix standard, mais peut-être est-ce possible en utilisant des ACL? L'utilisateur se connectera toujours à l'aide de SFTP, donc s'il y avait un moyen de contrôler cela dans SFTP (par opposition aux autorisations du système d'exploitation), ce serait bien.
Pour être absolument clair, je veux ce qui suit:
- echo hello> test # réussit, car le test n'existe pas et la création est autorisée
- echo hello >> test # peut réussir ou échouer, selon que l'ajout est autorisé
- echo hello2> test # échoue, car le test existe déjà et la modification n'est pas autorisée
- cat test # réussit, car les lectures sont autorisées
- rm test # échoue, car la suppression n'est pas autorisée
Si vous vous demandez pourquoi je veux faire cela, c'est pour rendre un système de sauvegarde Duplicati résistant à Ransomware.
la source
echo > test
, le shell fait unopen("test", O_WRONLY|O_CREAT|O_TRUNC)
qui crée le fichier, puis invoqueecho
qui écrit le contenu afin de le modifier. Vous pouvez maintenant autoriser uniquement la première ouverture (WR) à réussir.Réponses:
Vous pouvez utiliser
bindfs
comme:Ce répertoire appartient à stephane, le groupe stephane (stephane étant son seul membre). Notez également
t
que cela empêche les utilisateurs de renommer ou de supprimer des entrées qui ne leur appartiennent pas.Nous-
bindfs
dir
mêmes avec une propriété et des autorisations fixes pour les fichiers et les répertoires. Tous les fichiers semblent appartenir àroot
(bien qu'en dessous dans le vrai répertoire, ils appartiennent toujours à stephane).Les répertoires obtiennent des
drwxrwxr-x root stephane
autorisations tandis que d'autres types de fichiers en obtiennent-rw-r--r-- root stephane
.La création d'un fichier fonctionne maintenant car le répertoire est accessible en écriture:
Cependant, il n'est pas possible de faire une deuxième écriture
open()
sur ce fichier car nous n'avons pas la permission dessus:(notez que l'ajout n'y est pas autorisé (car il ne fait pas partie de vos exigences initiales)).
Une limitation: bien que vous ne puissiez pas supprimer ou renommer des entrées à
dir
cause dut
bit, les nouveaux répertoires que vous créez ne comporteront pas cet
bit, vous pourrez donc y renommer ou supprimer des entrées.la source
L'
chattr +a
option autorisera uniquement l'ajout. Les fichiers peuvent être modifiés de cette façon, mais uniquement en y ajoutant (c'est-à-dire en y ajoutant des lignes). Vous ne pouvez pas supprimer des fichiers existants, mais en créer de nouveaux. Cela pourrait répondre à vos besoins:de
man chattr
(notez qu'il s'applique également aux répertoires)
Votre liste ressemblerait donc à:
la source
chattr +a
alors je peux créer un fichier, je ne suis pas autorisé à le supprimer, peut ajouter. Si je crée dir1 / dir2 alors je peux faire comme bon me semble IN