3.9. Confining an administrator by using sudo and the sysadm_r role
You can map a specific user with administrative privileges to the staff_u SELinux user, and configure sudo so that the user can gain the sysadm_r SELinux administrator role. This role allows the user to perform administrative tasks without SELinux denials. When the user logs in, the session runs in the staff_u:staff_r:staff_t SELinux context, but when the user enters a command by using sudo, the session changes to the staff_u:sysadm_r:sysadm_t context.
By default, all Linux users in Red Hat Enterprise Linux, including users with administrative privileges, are mapped to the unconfined SELinux user unconfined_u. You can improve the security of the system by assigning users to SELinux confined users. This is useful to conform with the V-71971 Security Technical Implementation Guide.
Prerequisites
-
The
rootuser runs unconfined. This is the Red Hat Enterprise Linux default.
Procedure
Map a new or existing user to the
staff_uSELinux user:To map a new user, add a new user to the
wheeluser group and map the user to thestaff_uSELinux user:# adduser -G wheel -Z staff_u <example_user>To map an existing user, add the user to the
wheeluser group and map the user to thestaff_uSELinux user:# usermod -G wheel -Z staff_u <example_user>
Restore the context of the user’s home directory:
# restorecon -R -F -v /home/<example_user>To allow
<example_user>to gain the SELinux administrator role, create a new file in the/etc/sudoers.d/directory, for example:# visudo -f /etc/sudoers.d/<example_user>Add the following line to the new file:
<example_user> ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALL
Verification
Check that
<example_user>is mapped to thestaff_uSELinux user:# semanage login -l | grep <example_user> <example_user> staff_u s0-s0:c0.c1023 *Log in as
<example_user>, for example, by using SSH, and switch to therootuser:[<example_user>@localhost ~]$ sudo -i [sudo] password for <example_user>:Show the
rootsecurity context:# id -Z staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023Try an administrative task, for example, restarting the
sshdservice:# systemctl restart sshdIf there is no output, the command finished successfully.
If the command does not finish successfully, it prints the following message:
Failed to restart sshd.service: Access denied See system logs and 'systemctl status sshd.service' for details.