Linux Context(安全上下文)是SELinux(Security-Enhanced Linux)实现强制访问控制(MAC)的核心标识机制,两者通过“标签-策略”的联动,为Linux系统提供比传统自主访问控制(DAC)更细粒度的安全防护。
SELinux通过为系统中的进程、文件、端口等资源分配唯一的“安全上下文”(Security Context),实现对资源的分类与识别。安全上下文是一个结构化的标签,通常包含四个字段(格式:user:role:type:level
),其中:
unconfined_u
代表普通用户,root
代表系统root用户),用于标识资源的创建者或所属主体;object_r
用于文件/目录,system_r
用于进程),是连接用户与类型的桥梁;httpd_sys_content_t
代表httpd服务可访问的网页文件,httpd_t
代表httpd进程的域),是SELinux“类型强制”(Type Enforcement)的关键;s0:c123
代表特定类别)。通过安全上下文,SELinux能精准识别“谁(进程)可以访问什么(资源)”。
SELinux的访问控制逻辑基于“主体-客体”模型:
httpd
服务进程),其安全上下文中的domain
(域)代表进程的运行环境;/var/www/html/index.html
文件),其安全上下文中的type
(类型)代表资源的类别。当进程尝试访问资源时,SELinux会检查两者的安全上下文是否符合策略规则(Policy Rules)。例如,若策略中存在allow httpd_t httpd_sys_content_t:file { read write };
规则,且进程的domain
为httpd_t
、资源的type
为httpd_sys_content_t
,则允许访问;否则,即使文件系统权限(如rwx
)允许,访问也会被拒绝。
SELinux的安全策略(如targeted
策略,默认覆盖大部分服务)通过“allow/deny”规则定义了域与类型之间的访问权限。这些规则的执行完全依赖安全上下文的匹配:
例如,httpd_t
域的进程默认只能访问httpd_sys_content_t
类型的文件(如网页内容),若将某个脚本文件的类型改为httpd_sys_script_exec_t
(可执行脚本类型),则httpd_t
进程才能执行该脚本。这种机制彻底避免了传统DAC中“root用户权限过高”的问题——即使root启动的进程,若其域不符合策略,也无法访问未授权的资源。
SELinux提供了丰富的命令来管理安全上下文,确保其符合安全策略:
ls -Z
(查看文件/目录的上下文)、ps -Z
(查看进程的上下文);chcon
(临时修改,如chcon -t httpd_sys_content_t /var/www/html/test.html
)、restorecon
(恢复默认上下文,如restorecon -Rv /var/www/html
,基于/etc/selinux/targeted/contexts/files/file_contexts
中的策略);semanage fcontext
(添加自定义上下文规则,如semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
,再通过restorecon
应用)。这些命令的核心目的是确保资源的上下文与SELinux策略一致,从而实现“最小权限”的安全目标。
综上,Linux Context是SELinux实现强制访问控制的“语言”,而SELinux是解读这种语言的“引擎”——通过安全上下文的标识与策略的匹配,SELinux为Linux系统构建了多层安全防线,弥补了传统DAC的不足。