web-dev-qa-db-fra.com

Est-il possible d'implémenter un système de réservation "name" en utilisant les permissions de fichiers linux

J'ai un serveur multi-utilisateur Linux avec plus de 100 utilisateurs dans/etc/passwd

J'aimerais permettre aux utilisateurs de "réserver"/"réserver" le nom de leur choix (dans ce cas, un sous-domaine, mais peu importe les détails)

J'ai créé un répertoire appelé /reservations et avec chmod 777.

Si l'utilisateur johndoe le sait, touch /reservations/coolsite, il indique qu'il souhaite "posséder" ce nom "coolsite"

Le "mécanisme" devrait être mis en place de sorte que,

  • johndoe peut changer d’avis plus tard et rm /reservations/coolsite pour annuler la réservation de ce nom

  • un autre utilisateur n'est pas autorisé à touch /reservations/coolsite, car johndoe l'a demandé en premier.

  • si johndoe rm son fichier, un autre utilisateur est autorisé à le réserver.

  • les utilisateurs ne peuvent pas rm / rename / mv / etc autres fichiers de personnes

  • l'utilisateur johndoe peut faire plusieurs réservations en utilisant touch /reservations/coolsite && touch /reservations/coolsite2

Est-ce possible d'utiliser un type de mécanisme d'autorisations Linux standard?

Je n’aimerais pas avoir recours à Perl pour cela, mes compétences en Perl sont rouillées depuis le jour oùRuby est arrivé avec ses cheveux blonds ondulés ...

10

Ce que vous demandez pour le répertoire /reservations correspond exactement au comportement du répertoire standard /tmp:

Chaque utilisateur peut y créer des fichiers et seul lui est autorisé à les supprimer ou les modifier. Ceci est réalisé par le bit t (aka collant (---) ) dans les autorisations. Aucun utilisateur n'a besoin d'autorisations spéciales ni de masques de masquage.

Ainsi:

chown root /reservations
chmod 1777 /reservations

c'est tout ce dont vous avez besoin. Le chown root sert uniquement à empêcher d'autres utilisateurs (normaux) de bidouiller avec ce répertoire. Ce n'est pas vraiment nécessaire . En savoir plus sur le bit sticky ici:

31
PerlDuck