Privilegios

Un privilegio es el derecho de una cuenta, como una cuenta de usuario o grupo, para realizar varias operaciones relacionadas con el sistema en el equipo local, como apagar el sistema, cargar controladores de dispositivos o cambiar la hora del sistema. Los privilegios difieren de los derechos de acceso de dos maneras:

  • Los privilegios controlan el acceso a los recursos del sistema y las tareas relacionadas con el sistema, mientras que los derechos de acceso controlan el acceso a objetos protegibles.
  • Un administrador del sistema asigna privilegios a las cuentas de usuario y grupo, mientras que el sistema concede o deniega el acceso a un objeto protegible en función de los derechos de acceso concedidos en las ACL del objeto.

Cada sistema tiene una base de datos de cuentas que almacena los privilegios mantenidos por las cuentas de usuario y grupo. Cuando un usuario inicia sesión, el sistema genera un token de acceso que contiene una lista de los privilegios del usuario, incluidos los concedidos al usuario o a grupos a los que pertenece el usuario. Tenga en cuenta que los privilegios solo se aplican al equipo local; una cuenta de dominio puede tener privilegios diferentes en distintos equipos.

Cuando el usuario intenta realizar una operación con privilegios, el sistema comprueba el token de acceso del usuario para determinar si el usuario contiene los privilegios necesarios y, si es así, comprueba si los privilegios están habilitados. Si el usuario produce un error en estas pruebas, el sistema no realiza la operación.

Para determinar los privilegios que se mantienen en un token de acceso, llame a la función GetTokenInformation , que también indica qué privilegios están habilitados. La mayoría de los privilegios están deshabilitados de forma predeterminada.

La API de Windows define un conjunto de constantes de cadena, como SE_ASSIGNPRIMARYTOKEN_NAME, para identificar los distintos privilegios. Estas constantes son las mismas en todos los sistemas y se definen en Winnt.h. Para obtener una tabla de los privilegios definidos por Windows, consulte Constantes de privilegios. Sin embargo, las funciones que obtienen y ajustan los privilegios de un token de acceso usan el tipo LUID para identificar los privilegios. Los valores LUID de un privilegio pueden diferir de un equipo a otro y de un arranque a otro en el mismo equipo. Para obtener el LUID actual que corresponde a una de las constantes de cadena, use la función LookupPrivilegeValue . Use la función LookupPrivilegeName para convertir un LUID en su constante de cadena correspondiente.

El sistema proporciona un conjunto de nombres para mostrar que describen cada uno de los privilegios. Son útiles cuando necesita mostrar una descripción de un privilegio para el usuario. Use la función LookupPrivilegeDisplayName para recuperar una cadena de descripción que corresponde a la constante de cadena de un privilegio. Por ejemplo, en sistemas que usan inglés de EE. UU., el nombre para mostrar del SE_SYSTEMTIME_NAME privilegio es "Cambiar la hora del sistema".

Puede usar la función PrivilegeCheck para determinar si un token de acceso contiene un conjunto de privilegios especificado. Esto es útil principalmente para las aplicaciones de servidor que suplantan a un cliente.

Un administrador del sistema puede usar herramientas administrativas, como el Administrador de usuarios, para agregar o quitar privilegios para las cuentas de usuario y grupo. Los administradores pueden usar mediante programación las funciones de autoridad de seguridad local (LSA) para trabajar con privilegios. Las funciones LsaAddAccountRights y LsaRemoveAccountRights agregan o quitan privilegios de una cuenta. La función LsaEnumerateAccountRights enumera los privilegios mantenidos por una cuenta especificada. La función LsaEnumerateAccountsWithUserRight enumera las cuentas que contienen un privilegio especificado.

Constantes de autorización

Habilitación y deshabilitación de privilegios en C++