¿Cuál es el propósito del directorio setgid?

11

Sé cómo funciona setgid, pero no sé por qué está diseñado, ¿hay algún ejemplo para ilustrar qué problemas resuelve?

Xiè Jìléi
fuente

Respuestas:

18

Si bien un archivo / binario setgid podría no ser obviamente útil, definitivamente encuentro que el bit setgid es muy útil aplicado en los directorios. Asumiendo que usted es parte de diferentes grupos de trabajo, cada uno con sus propios grupos de Unix (permiso). ¿Seguramente desearía colocar el bit setgid en las carpetas del proyecto, asegurándose de que se aplique la propiedad correcta del grupo cuando cree nuevos archivos y, por lo tanto, permitiendo que sus colegas en ese grupo del proyecto accedan a esos archivos?

andol
fuente
2
Si está utilizando CVS, probablemente esté muy familiarizado con él por este mismo motivo (si los directorios en el repositorio no están configurados, entonces obtendrá muchos errores de permiso a medida que diferentes usuarios intentan pagar y confirmar los archivos)
Suppressingfire
Sí, tiene razón, otros usuarios pueden compartir (leer) los archivos creados por usted en los directorios setgid, pero el permiso de escritura grupal (g + w) no se hereda en el directorio setgid y, por lo tanto, otro usuario no puede agregar a un sub- directorio creado por usted en el directorio setgid, esto limitó su uso. Y así que tengo esta pregunta, resuelve el problema de lectura compartida de CVS pero no la escritura compartida en los directorios recién creados. ??
Xiè Jìléi
1
Es por eso que también desea utilizar la configuración adecuada de umask. Por ejemplo, umask 007 dejaría permisos completos para usuarios y grupos, pero ninguno para otros.
andol
13

El uso principal es preservar al propietario del grupo de un árbol de archivos:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

Esto tiende a ser útil en entornos donde diferentes usuarios crearán / editarán archivos / directorios en un directorio: cuando todos los archivos / directorios comparten el mismo grupo, todos los usuarios pueden editar / cambiar los archivos / directorios (si los permisos lo permiten): esto evita situaciones como "xyz posee el archivo abc, así que no puedo editarlo".

Una alternativa al uso de setgid de esta manera es la opción de montaje del sistema de archivos grpid .

Desde el montaje del hombre:

grpid o bsdgroups / nogrpid o sysvgroups

Estas opciones definen qué ID de grupo obtiene un archivo recién creado. Cuando se establece grpid, toma la identificación del grupo del directorio en el que se crea; de lo contrario (el valor predeterminado) toma el fsgid del proceso actual, a menos que el directorio tenga el bit setgid establecido, en cuyo caso toma el gid del directorio padre y también obtiene el bit setgid si es un directorio en sí mismo.

Cuando está habilitado, los archivos / directorios creados en un sistema de archivos montado en grpid también heredan el grupo del directorio principal:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

Descubrí que usar la opción grpid reduce adecuadamente la posibilidad de error humano (ya que el sistema de archivos hace el trabajo, independientemente de los permisos de directorio).

Lockie
fuente