2010-09-25 17 views
8

Estoy escribiendo algo similar al http://ideone.com/. Actualmente estoy ejecutando procesos de usuario con llamada CreateProcess. Mato el proceso si se ejecuta más tiempo que el tiempo especificado, pero no sé cómo negar derechos de lectura/escritura del sistema de archivos/creación de derechos de proceso, etc. al proceso creado. El ejecutable dado puede ser literalmente cualquier cosa y necesito permitir solo stdin/stdout. También sería genial si pudiera establecer el conjunto de memoria de trabajo.Ejecutando un proceso con los privilegios más bajos posibles en winapi

He leído un montón de artículos en MSDN como CreateProcessAsUser Function, etc. CreateProcessWithLogonW Function pero se confunden muy rápido (probablemente debido a mi conocimiento es muy limitado Win32). Es suficiente llamar a CreateProcessAsUser y crear un usuario especial con esos privilegios limitados (y cómo crear dicho usuario).

Espero poder lograr esto en una llamada de función con los parámetros correctos así que por favor ayuda.

Además, si conoce algún proyecto similar de código abierto, sería genial.

Gracias.

============================================== ============

Edit: Hola otra vez :) Todavía estoy atascado con esto. No tuve tiempo suficiente para trabajar en esto, pero creo que la publicación de snemarch es muy útil. Si alguien tiene una solución lista para usar, sería genial. Publicaré si hago algo con los enlaces de snemarch.

+0

Instumentation VMware está fuera de la cuestión? o algún otro producto vm? –

+0

no, no está fuera de discusión, pero me gustaría atenerme a la API de victoria si es posible. Estoy abierto para todas las sugerencias. – Klark

Respuesta

5

Considere ejecutar el proceso de usuario dentro de un job object. Los procesos secundarios creados por el proceso de usuario terminarán dentro del mismo objeto de trabajo también. Puede aplicar restricciones específicas a la cantidad de recursos que puede usar el trabajo, cómo puede interactuar con la GUI, etc. (consulte la función SetInformationJobObject). Puede matar todos los procesos dentro de un objeto de trabajo de un solo golpe.

3

Tenemos un trozo de código para hacer esto, aunque no puedo publicarlo :(

Crear un token de acceso "restringido", basada en el token de acceso para este proceso. A continuación, crear un nuevo proceso para la . aplicación con este token de acceso

Tenía un comentario con el código - más información se puede encontrar en el artículo de MSDN llamada, "Browsing the Web and Reading E-mail safely as an Administrator". sin embargo, como de costumbre MS ha roto la web y el artículo no hay más

.

Las búsquedas asociadas encontraron la aplicación "DropMyRights" vinculada en un blog linking to this article que puede hacer lo que usted hormiga, ofrece hasta fuente, pero de nuevo esos enlaces se han roto en la página del blog.

es posible que desee mirar a funciones como OpenProcessToken GetTokenInformation CreateRestrictedToken

y privs como SE_CHANGE_NOTIFY_NAME

Cuestiones relacionadas