Mover y eliminar archivos en carpetas setguid

Mover y eliminar archivos en carpetas setguid

Necesitaba reemplazar mi archivo de correo con una versión limpia (todo lo que hace el correo en esta máquina es monitorear trabajos cron, por lo que no hay razón para no eliminar el correo que tiene más de 'n' días).

El archivo tiene permisos de lectura/escritura para mi cuenta de usuario, sin derechos para ningún otro usuario o grupo. La propiedad del grupo es el grupo de correo porque el bit setguid está configurado en /var/spool/mail.

No era miembro del grupo de correo.

drwxrwsr-x 2 correo raíz 4096 2 de septiembre a las 15:17.
drwxr-xr-x 14 raíz raíz 4096 10 de mayo 09:27 ..
-rw------- 1 myuser mail 219722 2 de septiembre 04:56 myuser

No pude mover ni eliminar este archivo hasta que me hice miembro del grupo de correo.

Mi pregunta es '¿Por qué?'. ¿Por qué convertirme a mí mismo, que demuestra tener permiso para leer y escribir este archivo, en miembro de un grupo que no me ha dado permiso para moverlo ni eliminarlo?

Respuesta1

Esto se debe a que rm( mvy similares) implican modificar la estructura del directorio y, a menos que tenga wpermiso de escritura () en ese directorio, no puede hacerlo.

Esto es irrelevante para el permiso del archivo relevante, solo necesita permiso suficiente en el directorio principal. Tenga en cuenta que la rmoperación es en realidad la unlink(2)llamada al sistema, que simplemente desvinculará el archivo de la asignación de inodo de archivo del directorio. Mientras mvse ejecuta -ing dentro del mismo sistema de archivos, rename(2)se ejecutará lo que asignará el inodo del archivo en el nuevo directorio.

Como puede ver, todo esto requiere modificar el directorio principal, independientemente del permiso del archivo, por lo que necesita wpermiso en el directorio para cambiar el nombre/eliminar/crear nuevos archivos.

Ahora, cuando el bit SETGID se establece en un directorio, todos los archivos de ese directorio serán propiedad del mismo grupo, el grupo propietario de ese directorio.

En su caso, /var/spool/mailel directorio es propiedad de root:mailcon permiso 775, con el bit STDGID establecido, lo que hará que todos los archivos de este directorio sean propiedad del mismo grupo mail.

Tal como están las cosas, si desea cambiar el nombre/eliminar myfilenecesita permiso suficiente en el /var/spool/maildirectorio, ya sea ser miembro del grupo rooto ser miembro del mailgrupo, el permiso myfilees irrelevante aquí como se explicó anteriormente.

Respuesta2

Creo que esto se debe a que cuando mueves o eliminas un archivo, los permisos importantes son los permisos del directorio principal. Dado que mover un archivo significa crear una copia del archivo y eliminar el original, necesitarás el permiso correcto en el directorio para poder hacerlo. En este caso, agregar su usuario al grupo de correo le otorgaría los permisos necesarios.

información relacionada