¿Es seguro usar setuid sin absolutamente ninguna entrada?

0

Tengo un script de shell que sincroniza algunos archivos desde una fuente remota y tengo una configuración de servidor HTTP bastante típica. Hay un usuario que posee los archivos servidos por el servidor HTTP y un usuario que ejecuta el servidor HTTP, ambos pertenecen al mismo grupo.

Quiero que los archivos sincronizados sean propiedad del usuario "propietario" y no quiero que el usuario del servidor HTTP pueda escribirles. Sin embargo, quiero que el usuario del servidor HTTP pueda invocar el script de sincronización.

Una opción es envolver el script de shell en una pequeña aplicación de C y usar setuid para que el usuario del servidor HTTP pueda ejecutarlo como el usuario "propietario".

Dado que:

  • No habrá ninguna entrada en el script: la ubicación remota, la ubicación de destino, etc., son constantes.
  • La secuencia de comandos setuid no será propiedad / ejecutada por la raíz.

¿Es esto algo seguro y sensato?

Editar:

Para explicar las cosas, puede usar los siguientes nombres:

  • despliegue-usuario: el usuario que debe poseer los archivos
  • www-user: el usuario que ejecuta el servidor HTTP
  • www-group: el grupo deploy-user y www-user pertenecen a
  • sync.sh: el script que actualiza el archivo
  • sync.txt: el archivo de destino
pregunta thexacre 07.12.2014 - 00:34
fuente

2 respuestas

1

Si entiendo su pregunta correctamente, creo que la solución más sencilla es:

chgrp <user> /path/to/syncfile

Todo lo que estás tratando de hacer se puede lograr con chmod , chgroup , o chown.
(* no hay suficientes repeticiones al hipervínculo > 2 veces)

Este comando anterior mantendrá el archivo de sincronización propiedad del propietario, mientras le otorga la propiedad del grupo al usuario. Los permisos de grupo de usuarios deben configurarse correctamente con chmod para que esto funcione. por ejemplo.

chmod 754 syncfile.foo

o

chmod 750 syncfile.foo

Donde 754 le da + rwx al propietario, + r-x al grupo de archivos (usuario), + r a todos los demás ..
O donde 750 da lo mismo, pero no le da a todos los demás permisos de lectura.

    
respondido por el cremefraiche 08.12.2014 - 07:09
fuente
1

(no tan) Respuesta completa:

#chmod 1770 /directory/containing/syncfile.txts/
#chmod 1750 /directory/containing/syncfile.sh/
#chgrp www-user /path/to/syncfile.sh

chmod -
1: Bit pegajoso (solo el propietario puede eliminar o modificar)
7: implementar -user + rwx
7: usuarios de grupo (www-user) + rwx
0: Todos los demás no pueden leer, escribir ni ejecutar.

La configuración del bit fijo en el segundo directorio es redundante porque solo el propietario tendrá permisos de modificación de todos modos, pero ¿por qué no?

chgrp -
Da a www-user syncfile.sh la propiedad del grupo.

    
respondido por el cremefraiche 08.12.2014 - 09:40
fuente

Lea otras preguntas en las etiquetas