SELinux通过用户(User)、角色(Role)、类型(Type)(简称URT)的三层模型实现强制访问控制(MAC)。其中,SELinux用户是连接Linux系统用户与SELinux策略的桥梁,决定了用户能扮演的角色及访问权限。每个Linux系统用户登录时,会映射到一个SELinux用户,该用户的SELinux上下文(如user_u:object_r:passwd_file_t:s0)决定了其对系统资源的访问能力。
使用semanage user -l命令可查看系统已定义的SELinux用户,包括其关联角色、MCS/MLS范围等信息。例如:
~# semanage user -l
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
guest_u user s0 s0 guest_r
user_u user s0 s0 user_r
staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r
unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
其中,unconfined_u是默认用户(允许无限制访问),user_u是受限用户(仅能执行基本操作)。
使用semanage login -l命令可查看Linux系统用户与SELinux用户的映射关系。例如:
~# semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ user_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
__default__表示未明确映射的系统用户,默认使用user_u;root用户映射到unconfined_u(拥有最高权限)。
使用semanage user -a命令创建新的SELinux用户,可通过-R指定关联角色、-r指定MCS/MLS范围。例如,创建一个名为dbadm_u的数据库管理员用户(关联staff_r和dbadm_r角色,MCS范围为s0-s0:c0.c110):
~# semanage user -a -R "staff_r dbadm_r" -r "s0-s0:c0.c110" dbadm_u
使用semanage user -d命令删除SELinux用户。例如,删除dbadm_u:
~# semanage user -d dbadm_u
注意:删除前需确保无Linux用户映射到该SELinux用户,否则会导致权限混乱。
使用semanage login -a命令将Linux系统用户映射到SELinux用户。例如,将user1映射到dbadm_u:
~# semanage login -a -s dbadm_u user1
若需将整个用户组(如dba组)映射到dbadm_u,可使用%组名语法:
~# semanage login -a -s dbadm_u %dba
semanage login -m -s 新SELinux用户 用户名(如semanage login -m -s webadm_u user1)semanage login -d 用户名(如semanage login -d user1)。使用id -Z命令查看当前用户的SELinux上下文,例如:
~$ id -Z
user_u:object_r:user_home_t:s0
其中,user_u是SELinux用户,object_r是角色,user_home_t是类型,s0是安全级别。
使用ps -eZ命令查看进程的SELinux上下文,例如:
~# ps -eZ | grep sshd
system_u:system_r:sshd_t:s0 1234 ? 00:00:00 sshd
system_u是SELinux用户,system_r是角色,sshd_t是类型。
restorecon -Rv /path/to/dir恢复默认上下文),避免访问冲突。user_u),仅在必要时使用unconfined_u(如服务器管理),以降低安全风险。