Databases That Support RBAC
The following four databases store the data for the RBAC elements:
Extended user attributes database (user_attr) – Associates users and roles with authorizations and rights
Rights profile attributes database (prof_attr) – Defines rights profiles, lists the profiles' assigned authorizations, and identifies the associated help file
Authorization attributes database (auth_attr) – Defines authorizations and their attributes, and identifies the associated help file
Execution attributes database (exec_attr) – Identifies the commands with security attributes that are assigned to specific rights profiles
The policy.conf database contains authorizations,privileges, and rights profiles that are applied to all
users. For more information, see policy.conf File.
RBAC Database Relationships
Each RBAC database uses a key=value syntax for storing attributes. This method
accommodates future expansion of the databases. The method also enables a system to
continue to operate if the system encounters a keyword that is unknown to
its policy. The key=value contents link the files. The following linked entries from the
four databases illustrate how the RBAC databases work together.
Example 10-1 Showing RBAC Database Connections
In the following example, the user jdoe gets the capabilities of the File
System Management profile through being assigned the role filemgr.
The user jdoe is assigned the role filemgr in the jdoe user entry in the user_attr database.
# user_attr - user definition
jdoe::::type=normal;roles=filemgr
The role filemgr is assigned the rights profile File System Management in the role's entry in the user_attr database.
# user_attr - role definition
filemgr::::profiles=File System Management;type=role
The user and the role are uniquely defined in the passwd and shadow files on the local system, or in equivalent databases in a distributed name service.
The File System Management rights profile is defined in the prof_attr database. This database also assigns three sets of authorizations to the File System Management entry.
# prof_attr - rights profile definitions and assigned authorizations
File System Management:::Manage, mount, share file systems:
help=RtFileSysMngmnt.html;
auths=solaris.admin.fsmgr.*,solaris.admin.diskmgr.*,solaris.admin.volmgr.*
The authorizations are defined in the auth_attr database.
# auth_attr - authorization definitions
solaris.admin.fsmgr.:::Mounts and Shares::help=AuthFsmgrHeader.html
solaris.admin.fsmgr.read:::View Mounts and Shares::help=AuthFsmgrRead.html
solaris.admin.fsmgr.write:::Mount and Share Files::help=AuthFsmgrWrite.html
The File System Management rights profile is assigned commands with security attributes in the exec_attr database.
# exec_attr - rights profile names with secured commands
File System Management:suser:cmd:::/usr/sbin/mount:uid=0
File System Management:suser:cmd:::/usr/sbin/dfshares:euid=0
…
File System Management:solaris:cmd:::/usr/sbin/mount:privs=sys_mount
…
RBAC Databases and the Name Service
The name service scope of the RBAC databases can apply to the local
host only. The scope can also include all hosts that are served
by a name service such as NIS, NIS+, or LDAP. Which name service
has precedence is set for each of the databases in the /etc/nsswitch.conf file.
auth_attr entry – Sets the name service precedence for the auth_attr database.
passwd entry – Sets the name service precedence for the user_attr database.
prof_attr entry – Sets the name service precedence for the prof_attr database. Also sets the name service precedence for the exec_attr database.
For example, if a command with security attributes is assigned to a rights profile that exists in two name service scopes, only the entry in the first name service scope is used.
user_attr Database
The user_attr database contains user and role information that supplements the passwd and
shadow databases. The user_attr database contains extended user attributes such as authorizations, rights profiles,
and assigned roles. The fields in the user_attr database are separated by colons,
as follows:
user:qualifier:res1:res2:attr
The fields have the following meanings:
- user
The name of the user or role as specified in the passwd database.
- qualifier:res1:res2
These fields are reserved for future use.
- attr
An optional list of semicolon-separated (;) key-value pairs that describes the security attributes to be applied when the user runs commands. The four valid keys are type, auths, profiles, and roles.
The type keyword can be set to normal, if this account is for a normal user. The type is role if this account is for a role.
The auths keyword specifies a comma-separated list of authorization names that are chosen from names that are defined in the auth_attr database. Authorization names can include the asterisk (*) character as a wildcard. For example, solaris.device.* means all of the Solaris device authorizations.
The profiles keyword specifies an ordered, comma-separated list of rights profile names from the prof_attr database. The order of rights profiles works similarly to UNIX search paths. The first profile in the list that contains the command to be executed defines which (if any) security attributes are to be applied to the command.
The roles keyword can be assigned to the user through a comma-separated list of role names. Note that roles are defined in the same user_attr database. Roles are indicated by setting the type value to role. Roles cannot be assigned to other roles.
The following example demonstrates how the Operator role is defined in a typical
user_attr database. The example shows how the role is assigned to user
jdoe. Roles and users are differentiated by the type keyword.
% grep operator /etc/user_attr
jdoe::::type=normal;roles=operator
operator::::profiles=Operator;type=role
auth_attr Database
All authorizations are stored in the auth_attr database. Authorizations can be assigned to
users, to roles, or to rights profiles. The preferred method is to place
authorizations in a rights profile, to include the profile in a role's list
of profiles, and then to assign the role to a user.
The fields in the auth_attr database are separated by colons, as follows:
authname:res1:res2:short_desc:long_desc:attr
The fields have the following meanings:
- authname
A unique character string that is used to identify the authorization in the format prefix.[suffix]. Authorizations for the Solaris OS use solaris as a prefix. All other authorizations should use a prefix that begins with the reverse-order Internet domain name of the organization that creates the authorization (for example, com.xyzcompany). The suffix indicates what is being authorized, which is typically the functional area and operation.
When the authname consists of a prefix and functional area and ends with a period, the authname serves as a heading to be used by applications in their GUIs. A two-part authname is not an actual authorization. The authname of solaris.printmgr. is an example of a heading.
When authname ends with the word “grant,” the authname serves as a grant authorization. A grant authorization enables the user to delegate to other users authorizations with the same prefix and functional area. The authname of solaris.printmgr.grant is an example of a grant authorization. solaris.printmgr.grant gives the user the right to delegate to other users such authorizations as solaris.printmgr.admin and solaris.printmgr.nobanner.
- res1:res2
Reserved for future use.
- short_desc
A short name for the authorization. This short name is suitable for display in user interfaces, such as in a scrolling list in a GUI.
- long_desc
A long description. This field identifies the purpose of the authorization, the applications in which the authorization is used, and the type of user who might use the authorization. The long description can be displayed in the help text of an application.
- attr
An optional list of semicolon-separated (;) key-value pairs that describe the attributes of an authorization. Zero or more keys can be specified.
The keyword help identifies a help file in HTML. Help files can be accessed from the index.html file in the /usr/lib/help/auths/locale/C directory.
The following example shows an auth_attr database with some typical values:
% grep printer /etc/security/auth_attr
solaris.admin.printer.:::Printer Information::help=AuthPrinterHeader.html
solaris.admin.printer.delete:::Delete Printer Information::help=AuthPrinterDelete.html
solaris.admin.printer.modify:::Update Printer Information::help=AuthPrinterModify.html
solaris.admin.printer.read:::View Printer Information::help=AuthPrinterRead.html
Note that solaris.admin.printer. is defined as a heading, because the authorization name ends
in a dot (.). Headings are used by the GUIs to organize families
of authorizations.
prof_attr Database
The prof_attr database stores the name, description, help file location, and authorizations that
are assigned to rights profiles. The commands and security attributes that are assigned
to rights profiles are stored in the exec_attr database. For more information, see exec_attr Database.
The fields in the prof_attr database are separated by colons, as follows:
profname:res1:res2:desc:attr
The fields have the following meanings:
- profname
The name of the rights profile. Rights profile names are case-sensitive. This name is also used by the user_attr database to indicate the profiles that are assigned to roles and users.
- res1:res2
Reserved for future use.
- desc
A long description. This field should explain the purpose of the rights profile, including what type of user would be interested in using the profile. The long description should be suitable for display in the help text of an application.
- attr
An optional list of key-value pairs that are separated by semicolons (;) that describes the security attributes to apply to the object on execution. Zero or more keys can be specified. The two valid keys are help and auths.
The keyword help identifies a help file in HTML. Help files can be accessed from the index.html file in the /usr/lib/help/profiles/locale/C directory.
The keyword auths specifies a comma-separated list of authorization names that are chosen from those names that are defined in the auth_attr database. Authorization names can be specified with the asterisk (*) character as a wildcard.
The following example shows two typical prof_attr database entries. Note that the Printer
Management rights profile is a supplementary rights profile of the Operator rights profile.
The example is wrapped for display purposes.
% grep 'Printer Management' /etc/security/prof_attr
Printer Management::: Name of rights profile
Manage printers, daemons, spooling: Description
help=RtPrntAdmin.html; Help file
auths=solaris.admin.printer.read, Authorizations
solaris.admin.printer.modify,solaris.admin.printer.delete
...
Operator::: Name of rights profile
Can perform simple administrative tasks: Description
profiles=Printer Management, Supplementary rights profiles
Media Backup,All;
help=RtOperator.html Help file
exec_attr Database
The exec_attr database defines commands that require security attributes to succeed. The commands
are part of a rights profile. A command with its security attributes can
be run by roles to whom the profile is assigned.
The fields in the exec_attr database are separated by colons, as follows:
name:policy:type:res1:res2:id:attr
The fields have the following meanings.
- profname
The name of the rights profile. Rights profile names are case-sensitive. The name refers to a profile in the prof_attr database.
- policy
The security policy that is associated with this entry. Currently, suser and solaris are the valid entries. The solaris policy recognizes privileges. The suser policy does not.
- type
The type of entity that is specified. Currently, the only valid entity type is cmd (command).
- res1:res2
Reserved for future use.
- id
A string that identifies the entity. Commands should have the full path or a path with a wildcard (*). To specify arguments, write a script with the arguments and point the id to the script.
- attr
An optional list of semicolon (;) separated key-value pairs that describes the security attributes to apply to the entity on execution. Zero or more keys can be specified. The list of valid keywords depends on the policy that is enforced.
For the suser policy, the four valid keys are euid, uid, egid, and gid.
The euid and uid keywords contain a single user name or a numeric user ID (UID). Commands that are designated with euid run with the supplied UID, which is similar to setting the setuid bit on an executable file. Commands that are designated with uid run with both the real UID and the effective UID.
The egid and gid keywords contain a single group name or numeric group ID (GID). Commands that are designated with egid run with the supplied GID, which is similar to setting the setgid bit on an executable file. Commands that are designated with gid run with both the real GID and the effective GID.
For the solaris policy, the valid keyword is privs. The value consists of a list of privileges that are separated by commas.
The following example shows some typical values from an exec_attr database:
% grep 'File System Management' /etc/security/exec_attr
File System Management:suser:cmd:::/usr/sbin/ff:euid=0
File System Management:solaris:cmd:::/usr/sbin/mount:privs=sys_mount
…
policy.conf File
The policy.conf file provides a way of granting specific rights profiles, specific authorizations,
and specific privileges to all users. The relevant entries in the file consist
of key=value pairs:
AUTHS_GRANTED=authorizations – Refers to one or more authorizations.
PROFS_GRANTED=rights profiles – Refers to one or more rights profiles.
CONSOLE_USER=Console User– Refers to the Console User rights profile. This profile is delivered with a convenient set of authorizations for the console user. You can customize this profile.
PRIV_DEFAULT=privileges – Refers to one or more privileges.
PRIV_LIMIT=privileges – Refers to all privileges.
The following example shows some typical values from a policy.conf database:
# grep AUTHS /etc/security/policy
AUTHS_GRANTED=solaris.device.cdrw
# grep PROFS /etc/security/policy
PROFS_GRANTED=Basic Solaris User
# grep PRIV /etc/security/policy
#PRIV_DEFAULT=basic
#PRIV_LIMIT=all
For more information about privileges, see Privileges (Overview).