2009-10-07 26 views
17

¿Es posible que una aplicación C++ que se ejecuta en Windows descarte privilegios en tiempo de ejecución?Privilegios de descarte en C++ en Windows

Por ejemplo, si un usuario inicia mi aplicación como administrador, pero no hay ninguna razón para ejecutar mi aplicación como administrador, ¿puedo de alguna manera renunciar a los privilegios de administrador?

En resumen, me gustaría escribir el código en la función main() que descarta privilegios que no necesito (por ejemplo, acceso de escritura en el directorio de Windows).

Respuesta

16

Sí, puede usar AdjustTokenPrivileges para eliminar los privilegios innecesarios y peligrosos de su token. Puede deshabilitarlo si no lo necesita de inmediato (el privilegio se puede habilitar más adelante) o eliminar un privilegio de su token.

También puede crear un token restringido a través de CreateRestrictedToken y reiniciar su aplicación ejecutándose con ese token restringido. CreateRestrictedToken se puede usar para deshabilitar privilegios y eliminar grupos (como Administrators Group) de un token.

Puede utilizar AdjustTokenGroups para eliminar el grupo de administradores del token de su proceso en ejecución, pero nunca lo he intentado en un proceso ya en ejecución.

Tenga en cuenta que el acceso de escritura al directorio de Windows no está cubierto por un privilegio. Los recursos en el sistema tienen ACL's que gobiernan quién tiene acceso. El sistema y los administradores tienen acceso de escritura al directorio de Windows.

Cuestiones relacionadas