¿Cómo se obtiene Linux para honrar los directorios setuid?

8

Hace algún tiempo, mientras estaba en una conversación en IRC, un usuario en un canal en el que estaba sugirió que alguien configurara un directorio para que heredara el ID de usuario en los archivos para resolver un problema que alguien más estaba teniendo. En ese momento hablé y dije "Linux no admite directorios setuid". Después de eso, la persona que dio el consejo me mostró un pastebin ( http://codepad.org/4In62f13 ) de su sistema en honor al conjunto de permisos setuid en un directorio.

Solo para explicar, cuando digo "Linux no admite directorios setuid", lo que quiero decir es que puede ir al "directorio chmod u + s" y establecerá el bit en el directorio. Sin embargo, Linux (como lo entendí) ignora este bit (en los directorios).

Por más que lo intenté, simplemente no puedo replicar esa pasta. Alguien me sugirió una vez que podría ser posible emular el comportamiento con selinux, y jugando con las reglas, es posible forzar un uid en un archivo, pero no desde un permiso de directorio setuid (que puedo ver). Leer en Internet ha sido bastante poco informativo: la mayoría de los lugares afirman "no, setuid en los directorios no funciona con Linux" y ocasionalmente "se puede hacer en circunstancias específicas" (como esto: http://arstechnica.com/ etc / linux / 2003 / linux.ars-12032003.html )

No recuerdo quién era la persona original, pero el sistema original era un sistema Debian 6 y el sistema de archivos que estaba ejecutando estaba montado en xfs con "default, acl". He intentado replicar eso, pero hasta ahora no he tenido suerte (he intentado hasta ahora con varias versiones de debian, ubuntu, fedora y centos)

¿Alguien me puede dar una idea de qué o cómo consigue un sistema para honrar a setuid en un directorio?

Takigama
fuente
XFS ciertamente tiene una opción de montaje ( grpid|bsdgroupso nogrpid|sysvgroups) que significa que los archivos en los directorios se crean con el grupo del directorio en lugar del grupo del propietario; tal vez jugar con eso?
Zanchey

Respuestas:

7

Setuid para directorios no se comporta como setgid. A menos que la salida de shell fuera de FreeBSD, alguien estaba aburrido y se divertía un poco a su costa.

El permiso setuid establecido en un directorio se ignora en los sistemas UNIX y Linux. [4] FreeBSD se puede configurar para interpretarlo de forma análoga a setgid, es decir, para forzar que todos los archivos y subdirectorios sean propiedad del propietario del directorio superior. [5]

En FreeBSD, los directorios se comportan como si su bit setgid estuviera siempre establecido, independientemente de su valor real. Como se indica en open (2), "cuando se crea un nuevo archivo se le asigna el grupo del directorio que lo contiene".

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

Aaron Copley
fuente
Creo que ese es el caso ... sin embargo, el tipo estaba bastante seguro de que logró su objetivo ... luego recurrí a los foros de Debian porque estaba usando Debian, y obtuve esto como respuesta: foros.debian.net / ... Posiblemente publiqué en un estado menos que idea y obtuve el hombro frío. Después de aproximadamente un mes y un poco de investigación, no estoy seguro de que definitivamente no se pueda hacer, pero no puedo entender por qué los chicos de Debian creen que es posible sin modificar algo.
Takigama
Si lo lograra, sería la mejor fuente de cómo se hizo. Investigué el tema yo mismo y no encontré nada.
Aaron Copley
@AaronCopley: ¿Tiene otra fuente que wikipedia por el hecho de que el conjunto de permisos setuid en un directorio está oculto en los sistemas Linux?
Martin Thoma
No. Pero puedes probarlo y verlo por ti mismo. :)
Aaron Copley
2

Respuesta parcial / solución:

Estaba tratando de hacer lo mismo, decidí no luchar y probar otro método. Lo que probé fue listas de control de acceso, para establecer permisos predeterminados. (Nota: es posible que deba habilitarlos primero).

setfacl -R --set-file=- . <<EOF
# file: testdir/
# owner: testuser
# group: testgroup
user::rwx
group::rwx
group:normaluser:rwx
mask::rwx
other::r-x
default:group::rwx
default:group:normaluser:rwx
default:mask::rwx
default:other::r-x
EOF

Aquí, testuser se usa para ejecutar pruebas, y el usuario normal puede eliminar los resultados, sin tener que usar la raíz (cada vez).

ctrl-alt-delor
fuente
Esto agrega un nuevo grupo, pero establecer id de grupo funciona bien.
ctrl-alt-delor
-2

De RHEL man chmod

chmod conserva los bits set-user-ID y set-group-ID de un directorio a menos que especifique explícitamente lo contrario. Puede establecer o borrar los bits con modos simbólicos como u + sy gs, y puede establecer (pero no borrar) los bits con un modo numérico.

Numéricamente si recuerdo correctamente, chmod 4711 ./diragrega el bit UID establecido, chmod 2711 ./diragrega el bit gid establecido para 6711establecer la herencia uid + gid según la demostración en pastebin.

Por la página del manual chmod u+s== chmod 4XXXy chmod g+s==chmod 2XXX

Oneiroi
fuente
1
no, entiendo cómo aplicarlos, ese no es el problema.
Takigama
(presione enter por error) El problema es lo que le hacen a un directorio, creo que setuid en los directorios no fue algo que Linux hizo, por ejemplo (sistema ubuntu 10.10): testuser @ boson: ~ $ ls -ald ~ drwsrwsrwx 3 testuser testuser 4096 2012-03-21 01:55 / home / testuser Ese directorio tiene setuid y setgid. Ahora, como usuario tt @ boson: ~ $ touch ~ testuser / file t @ boson: ~ $ ls -la! $ Ls -la ~ testuser / file -rw-r - r-- 1 t testuser 0 2012-03 -21 01:57 / home / testuser / file Tenga en cuenta cómo el bit setuid en el directorio no tiene ningún efecto (lo que espero). ¿Cómo hacer que un sistema Linux use setuid en un directorio?
Takigama
Puede borrarlos con algo como =755o 00755utilizando los números
Steve Buzonas