web-dev-qa-db-fra.com

Dropfolder Linux où les utilisateurs ne peuvent pas supprimer de fichiers

Je travaille sur un projet de serveur de fichiers pour l'école et j'utilise samba pour partager les dossiers. J'ai joué avec les autorisations de dossier, mais je n'arrive pas à comprendre comment faire un dépôt uniquement comme un dossier. C'est ce que je veux réaliser:

  • Propriétaire (compte serveur): Contrôle total (chmod number 7xx)
  • Groupe (utilisateurs qui se connectent au serveur samba): ne placez (supprimez) que des fichiers. Cela signifie donc ne pas ouvrir/modifier/supprimer des fichiers du dossier (chmod number x?x)
  • autres: pas d'accès (chmod number xx0)

J'ai essayé beaucoup de réglages chmod différents, mais je n'ai jamais obtenu le résultat souhaité. Est-ce seulement possible? J'ai beaucoup cherché sur Google mais je n'ai pas trouvé de réponse définitive.

Peut-être un moyen de définir des autorisations sur les fichiers chaque fois qu'ils sont placés dans le dossier?

Si vous avez besoin de plus d'informations sur la configuration de samba ou de toute autre chose, n'hésitez pas à demander!

Merci pour votre aide!

1
Bram

Essayez cette procédure.

Créer un dossier partagé et donner le droit de permission:

  mkdir /pathYouWant/share
  chmod 770 /pathYouWant/share

Cela ne donne aucun accès à d'autres.

  chmod +t /pathYouWant/share

Ce mode, selon page de manuel de 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

Comme Marty Fried l’a dit, les fichiers créés dans le dossier partagé doivent disposer des autorisations appropriées, ce qui peut être obtenu avec masques de partage samba dans smb.conf:

  create mask = 440
  directory mask = 550

Les programmes Windows ne doivent pas essayer de supprimer les fichiers en lecture seule sauf si l'option delete readonly est définie sur yes.

  delete readonly = no

Aussi, si vous voulez masquer tous les fichiers du dossier partagé:

  veto files = /*/
  delete veto files = no

Selon le manuel de samba, cette directive:

Que se passe-t-il si l'utilisateur tente de supprimer un répertoire contenant des fichiers veto? C’est là que l’option supprimer les fichiers veto entre en jeu. Si cette option booléenne est définie sur oui, l’utilisateur peut supprimer à la fois les fichiers normaux et les fichiers veto du répertoire, et le répertoire lui-même est supprimé. Si l'option est définie sur no, l'utilisateur ne peut pas supprimer les fichiers vetoés et, par conséquent, le répertoire n'est pas supprimé non plus. Du point de vue de l'utilisateur, le répertoire semble vide, mais ne peut pas être supprimé.

Après cette configuration, le seul problème qui reste est que l’utilisateur peut toujours supprimer ses propres fichiers même s’il ne le voit pas (nous ne savons pas pourquoi).

Nous avons donc décidé de suivre la suggestion de_Seppi de terminer la tâche et Bram Driesen a créé un script qui modifie la propriété du fichier sur le PC hôte.

Il a utilisé incron pour lancer le script chaque fois qu'un fichier est placé dans le dossier, après this comme guide pour mettre en place.

1
Lety

Malheureusement, votre problème ne peut pas être résolu si facilement. Si un utilisateur dispose d'une autorisation d'écriture dans un répertoire, il peut également supprimer des fichiers. Même s'il n'était pas capable de les supprimer, il pouvait toujours remplir un fichier avec des zéros, ce qui constituerait une suppression de données, mais pas du nœud du système de fichiers.


Une idée que j'ai utilisée une fois:

Vous créez un travail cron qui supprime de manière récurrente l'autorisation d'écriture de chaque fichier dans une arborescence de répertoires (comme tous les fichiers de /home/guest).

Notez que vous ne pouvez pas simplement utiliser chmod g-w -R /home/guest. Cela enlèverait aussi le bit d’écriture des répertoires, rendant impossible le placement de nouveaux fichiers. Vous devez donc parcourir chaque fichier et supprimer son bit d’écriture de groupe.

L’intervalle d’exécution de cronjob dépend de vous. À l’époque, je l’ai réglé sur 10 minutes. Je ne connais pas votre environnement, je ne peux donc pas vous faire de recommandation.

Malheureusement, je n'ai plus ce script, vous devrez donc faire du script bash pour le faire fonctionner. Mais sérieusement, je doute que ce soit une méthode efficace.

1
s3lph

Nous pouvons modifier les fichiers et les dossiers mais ne pouvons pas les supprimer.

Pour supprimer les attributs, exécutez les commandes suivantes:

Pour les fichiers:

Sudo chattr -R -a file.txt

Pour les annuaires:

Sudo chattr -R -a dir1/
0
Ankitsrivasta