¿Es posible implementar un sistema de reserva de "nombre" usando permisos de archivos de Linux

10

Tengo un servidor multiusuario de Linux con más de 100 usuarios en / etc / passwd

Me gustaría permitir a los usuarios "reservar" / "reservar" un nombre de su agrado (en este caso, un subdominio, pero esos detalles no importan)

He creado un directorio llamado /reservationsy con chmod 777.

Si el usuario johndoe lo hace, touch /reservations/coolsiteindica que le gustaría "poseer" ese nombre "coolsite"

El "mecanismo" debe configurarse de modo que,

  • johndoe puede cambiar de opinión más tarde y rm /reservations/coolsitecancelar la reserva de ese nombre

  • otro usuario no está autorizado touch /reservations/coolsite, porque johndoe lo solicitó primero.

  • si johndoe rmsu archivo, otro usuario puede reservarlo.

  • los usuarios no pueden rm / rename / mv / etcotros archivos de personas

  • el usuario johndoe puede tener múltiples reservas haciendo touch /reservations/coolsite && touch /reservations/coolsite2

¿Es esto posible utilizando algún tipo de mecanismo de permisos estándar de Linux?

Odiaría recurrir a Perl para esto, mis habilidades de Perl se han oxidado desde el día en que Ruby llegó con su cabello rubio ondulado ...

guerrero ninja americano
fuente
No veo nada aquí que esté fuera de la ordenanza. Tener "coolsite" creado como "700" (sin permisos para el grupo y otros) y solo el propio usuario + administrador puede hacerle algo. Todos los demás obtienen un permiso denegado.
Rinzwind
Entonces, ¿debe indicar manualmente a los usuarios que recuerden chmod 700 después touch?
american-ninja-warrior
1
joshsverns Creo que puedes hacer cumplir eso? (con umask). Oh good one @perlduck
Rinzwind
¿Por qué no pudiste programarlo en rubí?
tubería

Respuestas:

31

Lo que solicita para el directorio /reservationses exactamente cómo se /tmpcomporta el directorio estándar :

Cada usuario puede crear archivos allí y solo él puede eliminarlos o modificarlos. Esto se logra mediante el tbit (también conocido como bit adhesivo ) en los permisos. Ningún usuario necesita permisos especiales o umasks entonces.

Así:

chown root /reservations
chmod 1777 /reservations

es todo lo que necesitas. Esto chown rootes solo para evitar que otros usuarios (regulares) jueguen con ese directorio. Realmente no es necesario. Lea más sobre la parte adhesiva aquí:

PerlDuck
fuente