2009-08-21 6 views
6

Considere este escenario en el que un ejecutable A.bin usa libY.so y libZ.so. A.c, Y.c y Z.c están todos escritos en C. Z.c y Y.c están compilados en sus respectivos archivos .so.El programa no se puede cargar después de configurar el bit setuid en

Esta es la estructura de directorios de los archivos

$ HOME/bin/A.bin $ home/lib/libY.so $ home/lib/libZ.so

cuando realizo una .bin como usuario normal, A.bin se ejecuta normalmente como se esperaba. Nota: $ LD_LIBRARY_PATH contiene $ home/lib

Cambié algunos códigos en A.c agregando alguna funcionalidad que necesita privilegios de administrador (como vincular a un puerto de menos de 1000). Establecí el bit de setuid para A.bin, libY.so y libZ.so en rwsrwsrws, y cambio la propiedad de los archivos a raíz. Cuando trato de ejecutar A.bin, me sale el siguiente error

ld.so.1: A.bin: fatal: libY.so: ha fallado: No existe el fichero o directorio Killed

cuando solo elimine el permiso de setuid de todos esos archivos, y luego las ejecuciones binarias, excepto la funcionalidad, fallará cuando necesite privilegios de administrador.

¿Cómo solucionar este problema?

Editar: El sistema operativo es Solaris 5.10

Respuesta

3

En algunas variantes de Unix, ejecutables SUID tienen algunas características de seguridad como ignorando LD_LIBRARY_PATH, la comprobación de propiedad y derechos de acceso sobre el ejecutable y usados ​​bibliotecas compartidas, ... no lo hago recuerda el caso de Solaris, pero probablemente deberías comprobarlo.

+4

* * Cualquier sistema operativo UNIX, que tiene que ignorar LD_LIBRARY_PATH para binarios setuid, de lo contrario es un problema de seguridad que podría conducir un camión. – caf

+0

@caf: Encontré uno que no lo hizo. Todos los binarios de setuid estaban enlazados estáticamente. – Joshua

Cuestiones relacionadas