web-dev-qa-db-fra.com

Autoriser tous les utilisateurs à créer des fichiers dans un répertoire, mais seul le propriétaire peut supprimer

Comment puis-je utiliser, de préférence une seule commande chmod, qui permettra à tout utilisateur de créer un fichier dans un répertoire mais seul le propriétaire de son fichier (l'utilisateur qui l'a créé) peut supprimer son propre fichier mais personne d'autre est dans ce répertoire.

Je pensais utiliser:

chmod 755 directory

Comme l'utilisateur peut créer un fichier et le supprimer, mais cela ne permettra-t-il pas à l'utilisateur de supprimer les fichiers d'autres personnes?

Je veux seulement que la personne qui a créé le fichier puisse supprimer son propre fichier. Ainsi, n'importe qui peut créer un fichier mais seule la personne qui a créé un fichier peut supprimer ce fichier (dans le répertoire).

19
Mandingo

Le bit collant peut faire plus ou moins ce que vous voulez. De man 1 chmod:

L'indicateur de suppression restreinte ou bit collant est un bit unique, dont l'interprétation dépend du type de fichier. Pour les répertoires, il empêche les utilisateurs non privilégiés de supprimer ou de renommer un fichier dans le répertoire à moins qu'ils ne soient propriétaires du fichier ou du répertoire; cela s'appelle l'indicateur de suppression restreinte pour le répertoire, et se trouve généralement sur les répertoires accessibles en écriture comme/tmp.

C'est-à-dire que la présence du bit collant sur un répertoire permet uniquement de renommer ou de supprimer des fichiers contenus si l'utilisateur est le propriétaire du fichier ou le propriétaire du répertoire contenant (ou si l'utilisateur est root).

Vous pouvez appliquer le bit collant (qui est représenté par octal 1000 ou t) comme ceci:

# instead of your chmod 755
chmod 1777 directory

# or, to add the bit to an existing directory
chmod o+t directory
32
Chris Down

Plus /tmp les répertoires sont créés avec ce type de jeu d'autorisations.

Vous voulez le bit "collant" du monde. La manière symbolique de régler ce bit est:

# chmod ugo+w,+t directory

La voie "modale" est:

# chmod 1777 directory
# ls -ld directory
drwxrwxrwt  2 root  wheel  2 Oct 21 17:06 directory/
14
Jim L.