Privilegios

Un privilegio es el derecho de una cuenta, como un usuario o una cuenta de grupo, para realizar diversas operaciones relacionadas con el sistema en el equipo local, como apagar el sistema, cargar controladores de dispositivo 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 los ACA de la DACL del objeto.

Cada sistema tiene una base de datos de cuentas que almacena los privilegios que mantienen 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 equipos diferentes.

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 mantenidos 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 para 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 resulta ú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 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++