Go to main content

man pages section 1M: System Administration Commands

Exit Print View

Updated: July 2017



roleadd - administer a new role account on the system


roleadd [-c comment] [-b base_dir | -d dir] [-e expire] [-f inactive] 
     [-g group] [-G group [, group...]] [-m [-k skel_dir]] 
     [-u uid [-o]] [-s shell] [-S repository]
     [-A authorization [,authorization...]] [-K key=value] role
roleadd -D [-b base_dir | -d dir] [-e expire] [-f inactive] 
     [-g group] [-A authorization [,authorization...]] 
     [-P profile [,profile...] [-K key=value]]


roleadd adds a role entry to the passwd and shadow and user_attr databases specified by the –S option. The default repository is files. The –A and –P options respectively assign authorizations and profiles to the role. Roles cannot be assigned to other roles. The –K option adds a key=value pair to user_attr for a role. Multiple key=value pairs can be added with multiple –K options.

roleadd also creates supplementary group memberships for the role (–G option) and creates the home directory (–m option) for the role if requested. The new role account remains locked until the passwd(1) command is executed.

Specifying roleadd –D with the –g, –b, –f, –e, or –K option (or any combination of these option) sets the default values for the respective fields. See the –D option. Subsequent roleadd commands without the –D option use these arguments.

The system file entries created with this command have a limit of 512 characters per line. Specifying long arguments to several options can exceed this limit.

The role (role) field accepts a string of no more than eight bytes consisting of characters from the set of alphabetic characters, numeric characters, period (.), underscore (_), and hyphen (-). The first character should be alphabetic and the field should contain at least one lower case alphabetic character. A warning message is written if these restrictions are not met. A future Solaris release might refuse to accept role fields that do not meet these requirements.

The role field must contain at least one character and must not contain a colon (:) or a newline (\n).

An administrator must be granted the User Management Profile to be able to create a new role. The authorizations required to set the various fields in passwd, shadow and user_attr can be found in passwd(4), shadow(4), and user_attr(4). The authorizations required to assign groups can be found in group(4).


The following options are supported:

–A authorization

One or more comma separated authorizations defined in auth_attr(4). Only a user or role who has grant rights to the authorization can assign it to an account

–b base_dir

The default base directory for the system if –d dir is not specified. base_dir is concatenated with the account name to define the home directory. If the –m option is not used, base_dir must exist.

–c comment

Any text string. It is generally a short description of the role. This information is stored in the role's passwd entry.

–d dir | server:dir

Specifies the home directory path for the new role. If no server name is specified, the specified directory is maintained in the passwd(4) database.

The optional server name specifies the host on which the home directory resides. Entries in this form depend on the automounter, and are maintained in the auto_home map. The path /home/username is maintained in the passwd(4) database. When the user subsequently references /home/username, the automounter will mount the specified directory on /home/username.


Display the default values for group, base_dir, skel_dir, shell, inactive, expire and key=value pairs. When used with the –g, –b, –f, or –K, options, the –D option sets the default values for the specified fields. The default values are:


other (GID of 1)















key=value (pairs defined in user_attr(4)

not present

–e expire

Specify the expiration date for a role. After this date, no user is able to access this role. The expire option argument is a date entered using one of the date formats included in the template file /etc/datemsk. See getdate(3C).

If the date format that you choose includes spaces, it must be quoted. For example, you can enter 10/6/90 or October 6, 1990. A null value (" ") defeats the status of the expired date. This option is useful for creating temporary roles.

–f inactive

The maximum number of days allowed between uses of a role ID before that ID is declared invalid. Normal values are positive integers. A value of 0 defeats the status.

–g group

An existing group's integer ID or character-string name. Without the –D option, it defines the new role's primary group membership and defaults to the default group. You can reset this default value by invoking roleadd –D –g group.

–G group

An existing group's integer ID or character-string name. It defines the new role's supplementary group membership. Duplicates between group with the –g and –G options are ignored. No more than NGROUPS_MAX groups can be specified.

–k skel_dir

A directory that contains skeleton information (such as .profile) that can be copied into a new role's home directory. This directory must already exist. The system provides the /etc/skel directory that can be used for this purpose.

–K key=value

A key=value pair to add to the role's attributes. Multiple –K options can be used to add multiple key=value pairs. The generic –K option with the appropriate key can be used instead of the specific implied key options (–A and –P). See user_attr(4) for a list of valid key=value pairs. The “type” key is not a valid key for this option. Keys can not be repeated.


Create the new role's home directory if it does not already exist. If the directory already exists, it must have read, write, and execute permissions by group, where group is the role's primary group. If the server name specified to the –d option is a remote host then the system will not attempt to create the home directory.

If the directory does not already exist and the parent directory is the mount point of a ZFS dataset, then a child of that dataset will be created and mounted at the specified location. The role is delegated permissions to create ZFS snapshots and promote them. The newly created dataset will inherit the encryption setting from its parent. If it is encrypted, the role is granted permission to change its wrapping key.


This option allows a UID to be duplicated (non-unique).

–P profile

One or more comma-separated execution profiles defined in prof_attr(4).

–s shell

Full pathname of the program used as the user's shell on login. It defaults to an empty field causing the system to use /bin/pfsh as the default. The value of shell must be a valid executable file.

–S repository

The valid repositories are files, ldap. The repository specifies which name service will be updated. The default repository is files. When the repository is files, the authorizations, profiles, and roles can be present in other name service repositories and can be assigned to a user in the files repository. When the repository is ldap, both the LDAP server and client must be configured with EnableShadowUpdate=true. Also, all the assignable attributes must be present in the ldap repository.

–u uid

The UID of the new role. This UID must be a non-negative decimal integer below MAXUID as defined in <sys/param.h>. The UID defaults to the next available (unique) number above the highest number currently assigned. For example, if UIDs 100, 105, and 200 are assigned, the next default UID number is 201. (UIDs from 0-99 are reserved for possible use in future applications.)

Exit Status

In case of an error, roleadd command prints an error message and exits with one of the following values. If the error occurred because LDAP is misconfigured, the following values are preceded by "LDAP configuration problem":


No permission for attempted operation.


The command syntax was invalid. A usage message for the usermod command is displayed.


An invalid argument was provided to an option.


The gid or uid given with the –u option is already in use.


The password and shadow files are not consistent with each other. pwconv(1M) might be of use to correct possible errors. See passwd(4) and shadow(4).


The login to be modified does not exist, the gid or the uid does not exist.


The group, passwd, or shadow file is missing.


A group or user name is already in use.


Cannot update the passwd, shadow, or user_attr file.


Insufficient space to move the home directory (–m option).


Unable to create, remove, or move the new home directory.


Requested login is already in use.


Unexpected failure.


Unable to update the group database.


Unable to update the project database.


Insufficient authorization.


Does not have role.


Does not have profile.


Does not have privilege.


Does not have label.


Does not have group.


System not running Trusted Extensions.


Does not have project.


Unable to update auto_home.










See attributes(5) for descriptions of the following attributes:

Interface Stability

See Also

auths(1), passwd(1), pfexec(1), profiles(1), roles(1), users(1B), groupadd(1M), groupdel(1M), groupmod(1M), grpck(1M), logins(1M), pwck(1M), userdel(1M), usermod(1M), getdate(3C), auth_attr(4), group(4), passwd(4), prof_attr(4), shadow(4), user_attr(4), attributes(5)

Working With Oracle Solaris 11.3 Directory and Naming Services: LDAP


In case of an error, roleadd prints an error message and exits with a non-zero status.

The following indicates that login specified is already in use:

UX: roleadd: ERROR: login is already in use. Choose another.

The following indicates that the uid specified with the –u option is not unique:

UX: roleadd: ERROR: uid uid is already in use. Choose another. 

The following indicates that the group specified with the –g option is already in use:

UX: roleadd: ERROR: group group does not exist. Choose another. 

The following indicates that the uid specified with the –u option is in the range of reserved UIDs (from 0-99):

UX: roleadd: WARNING: uid uid is reserved.

The following indicates that the uid specified with the –u option exceeds MAXUID as defined in <sys/param.h>:

UX: roleadd: ERROR: uid uid is too big. Choose another.

The following indicates that the /etc/passwd or /etc/shadow files do not exist:

UX: roleadd: ERROR: Cannot update system files - login cannot be created.

The following indicates that the user executing the command does not have sufficient authorization to perform the operation:

UX: roleadd: ERROR: Permission denied.