Security and access control
Commands related to authentication and access control
package require
twapi
This module provides procedures related to access control in
Windows operating systems.
A Locally Unique Identifier (LUID) is a
string generated by the command new_luid that is guaranteed to be unique on that
system for that boot session.
A Universally Unique Identifier (UUID)
is a string generated by the command new_uuid that is guaranteed to be unique on any
system at any time.
In both instances, unique means it will not be generated by some
other call to that command.
An access token is associated with a process or a thread and
contains various elements that determine the security context for
the process or thread.
The commands open_process_token and open_thread_token
retrieve the access tokens associated with a process and thread
respectively. An access token for a specific user account may be
obtained using open_user_token. The returned tokens can be passed to
other functions to retrieve or set information for the process or
thread's privileges and other security related information. When no
longer required, the tokens must be passed to close_token in order to
release resources.
The commands get_token_user, get_token_groups, get_token_primary_group, get_token_owner and
get_token_group_sids_and_attrs retrieve information
related to the user and group accounts associated with a token.
The commands get_token_privileges, check_enabled_token_privileges and get_token_privileges_and_attrs retrieve information
related to the privileges associated with a token. The commands
enable_token_privileges, disable_token_privileges and disable_all_token_privileges allow manipulation of
the same. Similarly, enable_privileges and disable_privileges can
be used to enable and disable privileges for the current process.
eval_with_privileges evaluates a script after
enabling specified privileges.
The command get_privilege_description returns a description of a
privilege.
The commands get_token_type and get_token_impersonation_level return information
related to impersonation.
get_token_source returns the source of a token.
get_token_statistics returns various other pieces of
information, such as expiration, memory usage etc.
The commands map_luid_to_privilege and map_privilge_to_luid
map LUID's to privilege names. The command is_valid_luid_syntax
can be used to check the syntactic validity of a LUID.
Windows allows a thread or process to impersonate a user
different from the account in which it was started (given the
proper privileges). The functions for impersonation and reverting
back are impersonate_token, impersonate_user,
impersonate_self, set_thread_token and
revert_to_self.
The command get_current_user returns the user account for the
thread taking into consideration any ongoing impersonation.
Impersonation may be done at several levels. These levels
control the degree to which the impersonator takes on the identity
of the impersonated client. The following constants define the
different levels:
anonymous |
The impersonating process cannot obtain
identification information about the client or impersonate it. |
identification |
The impersonating process cannot impersonate the
client (ie. access resources using the client's credentials) but
can obtain identity and privilege information about the client.
This can be used for controlling access to its own objects (as
opposed to operating system resources). |
impersonation |
The impersonating process can impersonate the
client only on the local system. The client credentials cannot be
used to access other resources on the network. |
delegation |
The impersonating process can use the client's
credentials for accessing network resources. |
Access rights in the Windows API take the form of a bit mask
with each bit signifying a specific desired or granted right.
Access rights may be specified to TWAPI functions in the form of a
single element or list of elements, each of which is an integer or
a symbolic constant. The access rights bit mask passed to the
underlying function is formed by OR'ing together the individual
elements in the list. In the case of a symbolic constant, the
access right is mapped to the appropriate bits before being OR'ed
with the other elements.
The following symbolic constants define generic access rights
that are mapped by each object type into its own specific rights:
generic_read, generic_write, generic_execute and generic_all.
The following symbolic constants define access rights that are
common to all securable object types: delete, read_control,
write_dac, write_owner, synchronize, standard_rights_read, standard_rights_write, standard_rights_execute, standard_rights_required and standard_rights_all. Refer to the Windows SDK for a
definition of these access rights.
In addition to the standard rights, specific object types may
have other access rights associated with them as described in the
following table.
Desktops |
desktop_readobjects,
desktop_createwindow, desktop_createmenu, desktop_hookcontrol, desktop_journalrecord, desktop_journalplayback, desktop_enumerate, desktop_writeobjects, desktop_switchdesktop. |
Events |
event_all_access,
event_modify_state. |
Files |
file_all_access,
file_generic_read, file_generic_write, file_generic_execute, file_read_data, file_write_data, file_append_data, file_read_ea, file_write_ea, file_execute, file_delete_child, file_read_attributes, file_write_attributes |
Mutexes |
mutex_all_access,
mutex_modify_state |
Named
pipes |
file_all_access,
file_read_data, file_write_data, file_create_pipe_instance, file_read_attributes, file_write_attributes |
Processes |
process_all_access,
process_terminate, process_create_thread, process_set_sessionid, process_vm_operation, process_vm_read, process_vm_write, process_dup_handle, process_create_process, process_set_quota, process_set_information, process_query_information, process_suspend_resume |
Registry |
key_all_access,
key_read, key_write, key_execute,
key_query_value, key_set_value, key_create_sub_key, key_enumerate_sub_keys, key_notify, key_create_link, key_wow64_32key, key_wow64_64key, key_wow64_res |
Semaphores |
semaphore_all_access,
semaphore_modify_state |
Services |
service_all_access,
service_query_config, service_change_config, service_query_status, service_enumerate_dependents, service_start, service_stop, service_pause_continue, service_interrogate, service_user_defined_control |
Threads |
thread_all_access,
thread_terminate, thread_suspend_resume, thread_get_context, thread_set_context, thread_set_information, thread_query_information, thread_set_thread_token, thread_impersonate, thread_direct_impersonation |
Timers |
timer_all_access,
timer_query_state, timer_modify_state. |
Tokens |
token_all_access,
token_assign_primary, token_duplicate, token_impersonate, token_query, token_query_source, token_adjust_privileges, token_adjust_groups, token_adjust_default, token_adjust_sessionid. |
Window
stations |
winsta_enumdesktops,
winsta_readattributes, winsta_accessclipboard, winsta_createdesktop, winsta_writeattributes, winsta_accessglobalatoms, winsta_exitwindows, winsta_enumerate, winsta_readscreen, winsta_all. |
Note that some of the symbolic access rights are a combination
of other access rights. For example, file_all_access includes all other rights
associated with a file object. When an access rights list is
returned from a command, it includes both the individual symbolic
rights as well as all valid symbols for combined rights.
Several functions deal with access control entries (ACE) either
directly or as part of the more complex structures. A new ACE may
be created through the new_ace command. The structure of an ACE should be
treated as opaque and the fields should be manipulated only through
the access control entry functions. An access control entry
contains the fields described below.
The type of an ACE may be one of the following values:
allow, deny, audit,
alarm, allow_compound, allow_object, deny_object, audit_object, alarm_object, allow_callback, deny_callback, allow_callback_object, deny_callback_object, audit_callback, alarm_callback, audit_callback_object, alarm_callback_object. Currently, only the
allow, deny
and audit type ACE's are supported. The
type of an ACE may be manipulated through the get_ace_type and set_ace_type commands.
Each ACE has an SID associated with it that indicates the user
or group that the ACE applies to. This may be retrieved or set
using the get_ace_sid
and set_ace_sid
functions.
The access rights granted or
restricted by an ACE can be manipulated through the get_ace_rights and
set_ace_rights
functions.
An ACE may be recursively applied to objects within a container.
This is controlled through the get_ace_inheritance
and set_ace_inheritance commands.
The command sort_aces may be used to sort a list of ACE elements
into the order recommended by Windows.
The command get_ace_text returns a textual description of an
ACE.
An access control list (ACL) is an ordered list of access control entries that is applied
to a resource. The command new_acl creates a new ACL with an optional set of ACE
elements.
The commands get_acl_aces and set_acl_aces may be used to retrieve or set the
access control entries in the ACL. Alternatively, the commands
prepend_acl_aces
and append_acl_aces may be used to place additional ACEs
in front of or after, respectively, of the current entries in an
ACL.
Access control lists are of two types - a discretionary access
control list (DACL) controls the operations that may be invoked on
a resource based on the identity of the accessor, while a system
access control list (SACL) controls the audit events that are
generated when the resource is accessed. A SACL should contain only
ACE elements of types prefixed with audit while a DACL should only contain ACE elements
of other types.
The list of ACE elements in an ACL may be resorted to conform to
the Windows recommended order through the sort_acl_aces command.
A security descriptor is associated with a resource and ties
together various information that controls access to the resource
including the SID of the owner of the resource, the SID of the
primary group, a discretionary access control list (DACL) and a
system access control list (SACL).
A new security descriptor may be created through the command
new_security_descriptor.
The commands get_security_descriptor_owner, get_security_descriptor_group, set_security_descriptor_owner and set_security_descriptor_group retrieve and set the
owner and group attributes of a security descriptor.
The commands get_security_descriptor_dacl, get_security_descriptor_sacl, set_security_descriptor_dacl and set_security_descriptor_sacl retrieve and set the
DACL and SACL fields of a security descriptor. It is important to
distinguish between the absence of a DACL (or SACL) in a security
descriptor and an empty DACL (or SACL). The former results in
everyone being allowed to access the object whereas the latter
results in no one being allowed to access the object. When
modifying or creating a security descriptor, pass the literal
string null to indicate that the
security descriptor has no DACL (or SACL). An empty DACL (or SACL)
on the other hand is indicated simply by passing an ACL that does
not contain any ACEs.
The command get_security_descriptor_control returns the control
flags associated with the security descriptor.
Note that not all fields in a security descriptor need to be
initialized. For example, to change the owner of a resource, you
only need to create a descriptor with the owner field initialized
either at creation time or through a subsequent call to set_security_descriptor_owner. Then this can be
passed to the appropriate function to set a resource's security
with an option indicating that only the owner field should be
changed.
The security information associated with each resource type can
be retrieved and modified through functions get_resource_security_descriptor and set_resource_security_descriptor.
The command get_security_descriptor_text returns a textual
description of a security descriptor.
A logon session is identified by an LUID and provides the context for a
particular instance of an authenticated security principal where
the principal may be a user, a computer, a service etc. A single
principal, for example a user, may have multiple logon sessions
concurrently present at any time. The command find_logon_sessions
allows enumeration of logon sessions. The details associated with
each can be obtained through the get_logon_session_info command.
- append_acl_aces ACL ACELIST
- Appends the list of ACEs in ACELIST to the
entries in the given ACL. Returns the modified ACL.
- check_enabled_privileges PRIVILEGES
?-any?
- Without the -any option, the command returns
1 if the given list of privileges is enabled in the token, and 0
otherwise. If the option -any is specified, the
command returns 1 if at least one of the privileges is enabled, and
0 otherwise. PRIVLIST is a list of privilege
names or LUIDs.
- close_token token
- Frees resources associated with an access token.
- disable_all_token_privileges token
- This command disables all privileges in the token. An error
will be raised if the privilege does not exist or cannot be
disabled because of lack of rights to the token handle.
The command returns a list of privileges that were modified by the
command because they were not previously disabled. This list can be
passed to enable_token_privileges to undo the privilege
modifications made by this call.
- disable_privileges PRIVLIST
- This command disables one or more privileges in the current
process. PRIVLIST is a list of privileges each
of which may be either a symbolic privilege such as SeLoadDriverPrivilege or a LUID corresponding to a
privilege.
An error will be raised if the privilege does not exist or cannot
be disabled because of lack of rights to the token handle.
The command returns a list of privileges that were modified by the
command because they were not previously disabled. This list can be
passed to enable_privileges to undo the privilege modifications
made by this call.
- disable_token_privileges token
PRIVLIST
- This command disables one or more privileges in the token.
PRIVLIST is a list of privileges each of which
may be either a symbolic privilege such as SeLoadDriverPrivilege or a LUID corresponding to a
privilege.
An error will be raised if the privilege does not exist or cannot
be disabled because of lack of rights to the token handle.
The command returns a list of privileges that were modified by the
command because they were not previously disabled. This list can be
passed to enable_token_privileges to restore the token
privileges to their original value.
- enable_privileges PRIVLIST
- This command enables one or more privileges in the current
process. PRIVLIST is a list of privileges each
of which may be either a symbolic privilege such as SeLoadDriverPrivilege or a LUID corresponding to a
privilege.
An error will be raised if a privilege does not exist or cannot be
enabled because of lack of rights to the token handle.
The command returns a list of privileges that were modified by the
command because they were not previously enabled. This list can be
passed to disable_privileges to undo the privilege
modifications made by this call.
- enable_token_privileges token
PRIVLIST
- This command enables one or more privileges in the token.
PRIVLIST is a list of privileges each of which
may be either a symbolic privilege such as SeLoadDriverPrivilege or a LUID corresponding to a
privilege.
An error will be raised if a privilege does not exist or cannot be
enabled because of lack of rights to the token handle.
The command returns a list of privileges that were modified by the
command because they were not previously enabled. This list can be
passed to disable_token_privileges to undo the privilege
modifications made by this call.
- eval_with_privileges
SCRIPT PRIVLIST
- The command enables the privileges specified in PRIVLIST, if they were not already enabled, and then
evaluates SCRIPT in the caller's context. The
command returns the result of SCRIPT after
restoring the privileges in effect when the command was
called.
- find_logon_sessions
?options?
- Returns a list of LUID values
that identify the logon sessions on the system. By default, all
logon sessions are returned. One or more of the following options
may be specified to restrict the set of logon sessions that are
returned.
-user ACCOUNT |
Only returns logon sessions for the specified user.
ACCOUNT may be either the account name or the
SID for the user. |
-type SESSIONTYPELIST |
Only returns logon sessions that match one of the
specified types. SESSIONTYPELIST is a list of
integer logon session types defined in the Windows SDK or the
following equivalent tokens: interactive, network,
batch, service, proxy,
unlockworkstation, networkclear, newcredentials, remoteinteractive, cachedinteractive, cachedremoteinteractive or cachedunlockworkstation. |
-tssession TSSESSION |
Only returns those logon sessions belonging to the
terminal services session identified by TSSESSION. |
- get_ace_inheritance
ACE
- Returns a flat list of "option value" pairs that indicate the inheritance
characteristics of the ACE. The option elements
are -self, -recursecontainers, -recurseobjects
and -recurseonelevelonly as described in the
documentation for new_ace. In addition, the
read-only option -inherited indicates whether
the ACE has been inherited from an ancestor or not.
- get_ace_rights ACE ?-type RESOURCETYPE? ?-raw?
- Returns a list of access rights contained within an ACE. This
is a list of symbolic constants and bit masks as described in
Access Rights. The option -type may be used to map the access rights to symbolic
constants for a specific type of resource. RESOURCETYPE must be one of file, pipe,
service, registry, process,
thread or token.
If the -raw option is specified, the access
rights are returned as a single hex bitmask.
- get_ace_sid ACE
- Returns the SID of the given ACE.
- get_ace_text ACE ?-resourcetype RESOURCETYPE?
- Returns a textual description of the specified ACE. The option
-resourcetype may be specified to indicate that
the ACE is for a particular resource type. RESOURCETYPE must be one of the resource type values
defined for the get_ace_rights command. This command is primarily
useful for debugging and troubleshooting purposes.
- get_ace_type ACE
- Returns the type of the given ACE. See Access Control Entries for the possible
types.
- get_acl_aces ACL
- Returns the ordered list of ACE elements in the given ACL.
- get_acl_rev ACL
- Returns the revision level of an ACL. Note that this is
controlled by the ACEs in the ACL and cannot be set directly.
- get_current_user ?-sid?
- Returns the user account for the current thread. If the thread
is impersonating, this command returns the account being
impersonated. By default, the command returns the name of the user
account. The option -sid may be specified to
retrieve the SID instead. Note this is not
the same as the $::env(USERNAME) variable as the
latter does not take impersonation into account.
- get_logon_session_info
SESSIONLUID ?options?
- Returns details for the logon session identified by SESSIONLUID. The information is returned as a flat list
of option value pairs and depends on the specified options:
-all |
Returns the values for all options. |
-authpackage |
Returns the name of the package that authenticated
the session. |
-dnsdomain |
Returns the DNS name for the owner of the logon
session. This is always empty on Windows 2000. |
-logondomain |
Returns the name of the domain used to authenticate
the session. |
-logonid |
Returns the LUID
for the session (same as SESSIONLUID). |
-logonserver |
Returns the name of the server used to authenticate
the session. This is always an empty string on Windows 2000. |
-logontime |
Returns the time session owner logged on. |
-type |
Returns the logon session type (see find_logon_sessions). |
-sid |
Returns the SID for the session owner. |
-tssession |
Returns the terminal session identifier for the
logon session. |
-user |
Returns the user name for the session owner. |
-userprincipal |
Returns the user principal name for the session
owner. This is always an empty string on Windows 2000. |
- get_privilege_description PRIVILEGE
- Returns a string description of the specified privilege.
- get_resource_security_descriptor RESTYPE NAME ?options?
- Retrieves the security descriptor attached to a operating
system resource. RESTYPE specifies the resource
type and if option -handle is not specified,
must be one of file, service (Windows service), printer, registry,
share (Network shares) or kernelobj (kernel objects such as mutexes,
semaphores and events). If option -handle is
specified, then RESTYPE may also be one of
windowstation, directoryservice, directoryserviceall, providerdefined, wmiguid or registrywow6432key.
NAME specifies the name of the resource, for
example, the path of a file unless option -handle is specified in which case it is the handle to
the resource.
Without any options being specified, the returned security
descriptor will contain only the owner, group and DACL fields. The
SACL field will not contain valid data. The following options may
be specified to control which fields are returned in the security
descriptor:
-all |
Includes all fields in the security descriptor.
This requires the caller to have the SeSecurityPrivilege privilege enabled. |
-dacl |
Includes the DACL in the returned security
descriptor. |
-group |
Includes the group information in the returned
security descriptor. |
-owner |
Includes the owner information in the returned
security descriptor. |
-sacl |
Includes the SACL in the returned security
descriptor. This requires the caller to have the SeSecurityPrivilege privilege enabled. |
- get_security_descriptor_control SECD
- Returns the control flags contained in the given security
descriptor SECD. The flags are returned as a
list of zero or more tokens from the following: owner_defaulted, group_defaulted, dacl_present, dacl_defaulted, sacl_present, sacl_defaulted, dacl_auto_inherit_req, sacl_auto_inherit_req, dacl_auto_inherited, sacl_auto_inherited, dacl_protected, sacl_protected, rm_control_valid, self_relative. Refer to the Windows Platform SDK
for details.
- get_security_descriptor_dacl SECD
- Returns the DACL contained in the given security descriptor
SECD.
- get_security_descriptor_group SECD
- Returns the group SID for the given security descriptor
SECD.
- get_security_descriptor_owner SECD
- Returns the owner SID for the given security descriptor
SECD.
- get_security_descriptor_sacl SECD
- Returns the SACL contained in the given security descriptor
SECD.
- get_security_descriptor_text SECD
?-resourcetype RESOURCETYPE?
- Returns a textual description of the specified security
descriptor SECD. The option -resourcetype may be specified to indicate that the
security descriptor is for a particular resource type. RESOURCETYPE must be one of the resource type values
defined for the get_ace_rights command. This command is primarily
useful for debugging and troubleshooting purposes.
- get_token_groups token ?-name?
- Returns the list of group SID's for the token. If -name is specified, returns the group names instead of
the SID's.
- get_token_groups_and_attrs token
- Returns the list of group SID's for the token together with the
attributes for each group. The returned list is of the form
SID ATTRIBUTELIST SID ATTRIBUTELIST... where
ATTRIBUTELIST is a list of zero or more of the
following attributes: enabled,
enabled_by_default, logon_id, mandatory,
owner, resource, and use_for_deny_only. Refer to the Windows Platform
SDK for details.
- get_token_impersonation_level token
- Gets the current impersonation level for the token. This may
have one of the following values: anonymous, identification, impersonation, or delegation. See Impersonation for details.
- get_token_owner token ?-name?
- Returns the SID of the entity (user, group, etc.) that will be
used as the owner for objects created using this token. If
-name is specified, the name of the entity is
returned instead of the SID.
- get_token_primary_group token
?-name?
- Returns the SID of the group that will be used as the primary
group for objects created using this token. If -name is specified, the name of the group is returned
instead of the SID.
- get_token_privileges
token ?-all?
- Returns the list of enabled privileges in the token. If the
option -all is specified, returns a list of two
sublists. The first containing the enabled privileges and the
second the disabled privileges.
- get_token_privileges_and_attrs token
- Returns the list of privileges in the token together with the
attributes for each. The returned list is of the form PRIVILEGE ATTRIBUTELIST PRIVILEGE ATTRIBUTELIST... where
ATTRIBUTELIST is a list of zero or more of the
following attributes: enabled,
enabled_by_default and used_for_access.
- get_token_source token
- Returns the source of an access token.
- get_token_statistics
token
- Returns various token statistics as a list of field value
pairs. The following fields are returned:
authluid |
The LUID for the
session represented by the token. |
expiration |
Expiration time for the token. Windows does not
currently support expiration for access tokens. |
dynamicavailable |
Number of free bytes available for storing default
protection and primary group identifier for the token. |
dynamiccharged |
Number of bytes allocated for storing default
protection and primary group identifier for the token. |
groupcount |
Number of group SID's included in the token. |
impersonationlevel |
The impersonation
level of the token. This value is only valid if the field
type has the value impersonation. |
luid |
An LUID that
identifies the instance of the token. |
modificationluid |
An LUID that
changes every time the token is modified. |
privilegecount |
The number of privileges (including disabled ones)
that are included in the token. |
type |
The type of the token - primary or impersonation. |
- get_token_type token
- Returns the type of the token: either primary, or impersonation.
- get_token_user token ?-name?
- Returns the SID of the user account associated with the token.
If -name is specified, returns the name of the
account instead of its SID. Example: Show the user account for each
process
- impersonate_self IMPERSONATIONLEVEL
- Assigns an impersonation token to the current thread based on
the security context of the process. The security characteristics
of the thread can then be changed (for example by modifying the
privileges of its token) without impacting the security context of
the remaining threads in the process.
IMPERSONATIONLEVEL may have any of the values
allowed for impersonation levels (see Impersonation).
- impersonate_token TOKEN
- Changes the security context of the calling thread to that of
the user account associated with the specified token. TOKEN is a token returned from a command such as
open_user_token, open_process_token or open_thread_token.
The caller must be careful that exceptions raised by this command
are handled correctly. It should not continue with normal
processing as though the security context was changed to that of
the token.
- impersonate_user USERNAME PASSWORD ?options?
- Changes the security context of the calling thread to that of
the specified user account. This is essentially a wrapper around
open_user_token and impersonate_token. Refer to the documentation of
open_user_token for a description of the
arguments.
The caller must be careful that exceptions raised by this command
are handled correctly. It should not continue with normal
processing as though the security context was changed to that of
the user account.
- is_valid_luid_syntax
LUID
- Returns if LUID is a syntactically valid
LUID, else 0.
- is_valid_sid_syntax
sid
- Returns true or false depending on whether sid is a valid SID or not. Note this only checks the
syntax of the SID, not whether it corresponds to a real
account.
- map_luid_to_privilege
LUID ?-system SYSTEMNAME? ?-mapunknown?
- Returns the privilege name corresponding to the given LUID. If
LUID does not correspond to a system defined
privilege, an exception is raised unless the -mapunknown option is specified. In this case, the
command will return a string of the form Privilege-LUID. As a special
case, if LUID is a privilege name (and not a
LUID), returns it as is. The option -system may
be used to specify a system as described in Standard Options.
- map_privilege_to_luid
PRIVILEGE ?-system SYSTEMNAME? ?-mapunknown?
- Returns the LUID corresponding to the given privilege name. If
PRIVILEGE does not correspond to a system
defined privilege name or a constructed privilege name of the form
Privilege-LUID, an
exception is raised. As a special case, if PRIVILEGE is itself a LUID, it is returned. The option
-system may be used to specify a system as
described in Standard Options.
- new_ace
ACETYPE ACCOUNT ACCESSRIGHTS ?options?
- Creates and returns a new ACE. ACETYPE is
the type of the ACE and should be one of supported values described
in Access Control Entries. The
user or group that the ACE pertains to is given by ACCOUNT which may be either a name or a SID. ACCESSRIGHTS determines the rights to be granted or
denied by the ACE and should be a list of one or more constants
described in Access Rights.
The following options may be specified when creating an ACE:
-self BOOLEAN |
If the specified value is 1 (default), the ACE
applies to the object to which it is attached. If the specified
value is 0, then the created ACE does not apply to the object with
which it is attached. In this case, it only applies to the
descendents of that object as indicated by the other options. |
-recursecontainers BOOLEAN |
If the specified value is 1, the ACE is also
applied to all descendents of the object to which the ACE is
attached that are themselves containers. For example, in the case
of a file ACE, this would indicate that the ACE also apply to all
subdirectories. If 0 (default), the ACE does not apply to
descendents that are containers. |
-recurseobjects BOOLEAN |
If the specified value is 1, the ACE is also
applied to all descendents of the object to which the ACE is
attached that are not themselves
containers. For example, in the case of a file ACE, this would
indicate that the ACE also apply to all files under all
subdirectories below a directory but not to the subdirectories
themselves. If 0 (default), the ACE does not apply to descendents
that are not containers. |
-recurseonelevelonly BOOLEAN |
If the specified value is 0 (default), the
-recursecontainers and -recurseobjects options have effect at all levels below
the container object to which the ACE is applied. If the value is
1, the ACE is only applied to the immediate children of the
container object. This option has no effect if neither -recurseobjects nor -recursecontainers
is specified. |
- new_acl
?ACELIST?
- Returns a new ACL initialized. ACELIST may
be optionally specified to prepopulate the ACL with a list of ACE
elements.
- new_luid
- Returns a LUID.
- new_security_descriptor ?options?
- Returns a new security
descriptor. The following options may be specified to
initialize various fields of the security descriptor:
-owner ACCOUNT |
The owner field of the security descriptor is set
to the SID for the specified account. ACCOUNT
may be the SID itself or the name of the user or group
account. |
-group ACCOUNT |
The primary group field of the security descriptor
is set to the SID for the specified account. ACCOUNT may be the SID itself or the name of the
group. |
-dacl ACL |
The DACL field of the security descriptor is set to
ACL. If ACL is the string
"null", no DACL will be present in the
security descriptor. |
-sacl ACL |
The SACL field of the security descriptor is set to
ACL. If ACL is the string
"null", no SACL will be present in the
security descriptor. |
- new_uuid
?-localok?
- Returns a UUID. If the system
does not contain a network card, the operating system may return an
error as it cannot guarantee uniqueness across systems. Specifying
the -localok option causes this to be ignored
and a identifier value to be returned anyways.
- nil_uuid
- Returns a nil UUID.
- open_process_token ?-pid PID? ?-access DESIREDACCESS?
- Returns a process token that can passed to other functions for
querying and modifying security related data for a process. By
default, the current process is assumed. The -pid option may be used to retrieve the token for another
process.
By -access option may be used to specify a list
of desired access rights. If this option is not specified, access
rights default to token_query. See
Access Rights for a description of the
format of this list and for a description of standard access
rights.
In addition, the following symbols may be specified in the list:
token_adjust_default, token_adjust_groups, token_adjust_privileges, token_adjust_sessionid, token_assign_primary, token_duplicate, token_execute, token_impersonate, token_query, token_query_source, token_read, token_write
and token_all_access. See the
documentation of OpenProcessToken in
the Windows SDK for a description of each of these.
When no longer required, this token must be passed to close_token.
Example: Show the user account
for each process
- open_thread_token ?-tid TID? ?-access DESIREDACCESS? ?-self BOOLEAN?
- Returns a thread access token that can passed to other
functions for querying and modifying security related data for a
thread. By default, the current process is assumed. The -pid option may be used to retrieve the token for another
process. Note that the command will generate an error if the thread
does not have a token. In this case, ::errorCode
facility and code are set to WINDOWS
and 1008 respectively. The caller can
retrieve the process token instead.
The -access option specifies the desired access
mode. See open_process_token for more details.
The -self option controls whether the access
check is to be made against the security context of the thread or
against the security context of the process. If specified as false,
the security context of the thread is used, else that of the
process.
When no longer required, this token must be passed to close_token.
- open_user_token USERNAME PASSWORD ?options?
- Returns a token corresponding to a logon session for the
USERNAME account. This token may be used for
impersonation or starting processes under a different account. When
no longer required, this token must be passed to close_token.
USERNAME is the name of the account and may be
specified either as just the account name, or in UPN format as
user@DNS_domain_name.
The following options may be specified:
-domain DOMAIN |
Specifies the domain for the user. This option must
not be specified if USERNAME is in UPN format
user@DNS_domain_name which includes a domain
name. If USERNAME is not in UPN format and
-domain is not specified, the account validation
is done only using the local account database. |
-type LOGONTYPE |
Indicates the logon type. LOGONTYPE must be one of batch, interactive,
network, network_cleartext, new_credentials, service or unlock.
Refer to the Windows SDK documentation of LogonUser for details. |
-provider PROVIDER |
Selects a logon provider. PROVIDER must be one of winnt50, winnt40 or
winnt35. If this option is not
specified, the operating system picks the standard (version
dependent) logon provider for the system. Specify winnt40 to select the NTLM provider and
winnt50 (only valid for Windows 2000
and up) for the negotiate logon provider. |
- prepend_acl_aces ACL ACELIST
- Prepends the list of ACEs in ACELIST to the
entries in the given ACL. Returns the modified ACL.
- reset_thread_token
- Ends the current thread's impersonation state.
- revert_to_self
- Calling this function will restore the original security
context for the process thereby ending any impersonation initiated
by prior impersonation commands such as impersonate_user.
Any exceptions raised by this command will result in the process
continuing to run in the impersonation context. This is dangerous
from a security perspective and the caller should normally
immediately exit.
- set_ace_inheritance
ACE ?options?
- Returns a new ACE constructed from ACE with
inheritance attributes defined by options. These
may be one or more of -self, -recursecontainers, -recurseobjects
and -recurseonelevelonly as described in the
documentation for new_ace.
- set_ace_rights ACE ACCESSRIGHTS
- Returns a new ACE containing the access rights specified in
ACCESSRIGHTS. This should be a list of symbolic
constants and bit masks as described in Access Rights.
- set_ace_sid ACE ACCOUNT
- Returns a new ACE constructed from ACE but
with its SID field set to be the SID for account ACCOUNT. ACCOUNT may be either the
name or the SID of a user or group account.
- set_ace_type ACE ACETYPE
- Returns a new ACE constructed from ACE but
with the type ACETYPE. See Access Control Entries for valid values
of ACETYPE.
- set_acl_aces ACL ACELIST
- Sets the list of ACEs within an ACL to those given in ACELIST. Returns the modified ACL.
- set_resource_security_descriptor RESTYPE NAME SECD
?options?
- Modifies the security descriptor attached to a operating system
resource. RESTYPE specifies the resource type
and if option -handle is not specified, must be
one of file, service (Windows service), printer, registry,
share (Network shares) or kernelobj (kernel objects such as mutexes,
semaphores and events). If option -handle is
specified, then RESTYPE may also be one of
windowstation, directoryservice, directoryserviceall, providerdefined, wmiguid or registrywow6432key.
NAME specifies the name of the resource, for
example, the path of a file unless option -handle is specified in which case it is the handle to
the resource.
The fields of the resource's security descriptor are modified based
on the contents of SECD. The specific fields
modified depend on the options specified:
-all |
All fields in the security descriptor are modified.
This requires the caller to have the SeSecurityPrivilege privilege enabled. |
-owner |
The resource's owner is modified. |
-group |
The resource's group is modified. |
-dacl |
Changes the DACL attached to the resource. |
-sacl |
Changes the SACL attached to the resource. This
requires the caller to have the SeSecurityPrivilege privilege enabled. |
-protect_dacl |
If this option is specified, the resource will not
inherit any DACL's from its parent. Otherwise, the parent's DACL's
flow down to the resource. This option only has effect if the
-dacl option is specified. This option
cannot be specified with -unprotect_dacl. If neither is specified, the
current DACL inherit settings are preserved. |
-protect_sacl |
If this option is specified, the resource will not
inherit any SACL's from its parent. Otherwise, the parent's SACL's
flow down to the resource. This option only has effect if the
-sacl option is specified. This option
cannot be specified with -unprotect_sacl. If neither is specified, the
current SACL inherit settings are preserved. |
-unprotect_dacl |
If this option is specified, the resource will
inherit any DACL's from its parent. This option only has effect if
the -dacl option is specified. This
option cannot be specified with -protect_dacl. If neither is specified, the current
DACL inherit settings are preserved. |
-unprotect_sacl |
If this option is specified, the resource will
inherit any SACL's from its parent. This option only has effect if
the -sacl option is specified. This
option cannot be specified with -protect_sacl. If neither is specified, the current
SACL inherit settings are preserved. |
- set_security_descriptor_dacl SECD
ACL
- Returns a security descriptor identical to SECD except for the DACL field which is set to ACL. If ACL is the string "null", the security descriptor is set to have no
DACL. If ACL is an empty list, the security
descriptor has an empty DACL, which is not
the same not having a DACL.
- set_security_descriptor_group SECD
ACCOUNT
- Returns a security descriptor identical to SECD except for the group field which is set to the SID
for account ACCOUNT. ACCOUNT
may be the SID itself or the name of the group.
- set_security_descriptor_owner SECD
ACCOUNT
- Returns a security descriptor identical to SECD except for the owner field which is set to the SID
for account ACCOUNT. ACCOUNT
may be the SID itself or the name of the user or group.
- set_security_descriptor_sacl SECD
ACL
- Returns a security descriptor identical to SECD except for the SACL field which is set to ACL. If ACL is the string "null", the security descriptor is set to have no
SACL.
- set_thread_token TOKEN
- Changes the security context of the current thread by
associating it with the given token. This is generally used in
combination with open_thread_token to implement an impersonation
stack.
- sort_aces
ACELIST
- Although not enforced by the operating system, Windows has a
recommended order in which multiple ACEs should be applied. The
sort_aces command takes a list of ACE elements
and returns a list that has been sorted as per the Windows
recommendation. This sort order places all inherited ACEs after all
non-inherited ACEs. Within each group, deny ACEs are placed before
allow ACEs.
- sort_acl_aces ACL
- Rearranges the ACEs in the given ACL to conform to the Windows
recommended order. Returns the modified ACL.
Copyright © 2003-2006, Ashok P. Nadkarni