0


6.6.6、查看 SELinux 安全上下文

关注公众号 “融码一生”,领取全套 PDF / 电子书

  • SELinux 管理过程中,进程是否可以正确地访问文件资源取决于它们的安全上下文。进程和文件都有自己的安全上下文,SELinux 会为进程和文件添加安全信息标签(比如 SELinux 用户、角色、类型、类别等),当运行 SELinux 后所有这些信息都将作为访问控制的依据。
  • 查看文件和目录的安全上下文:
# jy: 使用选项 -Z 查看文件和目录的安全上下文
ls -Z
:<<!
-rw-------.root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--.root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--.root root system_u:object_r:admin_home_t:s0 install.log.syslog
!
  • 查看目录的安全上下文需添加-d选项(代表目录本身,而非目录下的子文件):
ls -Zd /var/www/html/
:<<!
drwxr-xr-x.root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
!
  • 查看进程的安全上下文:
# 启动 apache 服务
service httpd start

ps auxZ | grep httpd
:<<!
unconfined_u:system_r:httpd_t:s0 root 25620 0.0 0.5 11188 3304 ? Ss
03:44 0:02 /usr/sbin/httpd
…省略部分输出…
!
  • 只要进程和文件的安全上下文匹配,该进程就可以访问该文件资源。
  • 安全上下文使用:分隔为 4 个字段,其实共有 5 个字段,最后一个“类别”字段是可选的:
#身份字段:角色:类型:灵敏度:[类别]
system_u:object_r:httpd_sys_content_t:s0:[类别]
  • 以下对这 5 个字段的作用进行说明。

1、身份字段(user)

  • 用于标识该数据被哪个身份所拥有,相当于权限中的用户身份。这个字段并没有特别的作用。常见的身份类型有 3 种:

    • root:表示安全上下文的身份是 root- system_u:表示系统用户身份,其中_u代表 user- user_u:表示与一般用户账号相关的身份,其中_u代表 user
  • user 字段只用于标识数据或进程被哪个身份所拥有,一般系统数据的 user 字段是system_u,而用户数据的 user 字段是user_u

  • SELinux 中到底可以识别多少用户身份字段?可以使用 seinfo 命令查询(SELinux 的相关命令一般都以se开头):

    • seinfo [选项]
      • 选项:
        • -u: 列出 SELinux 中所有的身份(user)- -r: 列出 SELinux 中所有的角色(role)- -t: 列出 SELinux 中所有的类型(type)- -b: 列出所有的布尔值(也就是策略中的具体规则名称)- -x: 显示更多的信息
  • SELinux 中能够识别的 user 身份共有 9 种:

seinfo -u
:<<!
Users:9
sysadm_u
system_u
xguest_u
root
guest_u
staff_u
user_u
unconfined_u
git_shell_u
!

2、角色(role)

  • 主要用来表示此数据是进程还是文件或目录。该字段在实际使用中也不需要修改。

  • 常见的角色有(_r代表 role):

    • object_r:代表该数据是文件或目录- system_r:代表该数据是进程
  • 使用 seinfo 命令也可以查询 SELinux 中的角色:

seinfo -r
:<<!
Roles:12
guest_r
staff_r
user_r
git_shell_r
logadm_r
object_r
sysadm_r
system_r
webadm_r
xguest_r
nx_server_r
unconfined_r
!

3、类型(type)

  • 类型字段是安全上下文中最重要的字段,进程是否可以访问文件主要就看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配,如果匹配则可以访问。
  • 注意:类型字段在文件或目录的安全上下文中被称作类型(type),但在进程的安全上下文中被称作域(domain)。即:在主体(Subject)的安全上下文中这个字段被称为域;在目标(Object)的安全上下文中这个字段被称为类型。域和类型需要匹配(进程的类型要和文件的类型相匹配)才能正确访问。
  • SELinux 中有多少类型也是通过 seinfo 命令查询:
seinfo -t | more
:<<!
Types:3488
#共有3488个类型
bluetooth_conf_t
cmirrord_exec_t
foghorn_exec_t
jacorb_port_t
sosreport_t
etc_runtime_t
…省略部分输出…
!
  • 已知 apache 进程可以访问/var/www/html/(此目录为 RPM 包安装的 apache 的默认网页主目录)目录中的网页文件,所以 apache 进程的域和/var/www/html/目录的类型是匹配的,我们查询一下:
ps auxZ | grep httpd
:<<!
unconfined_u:system_r:httpd_t:s0 root 25620 0.0 0.5 11188 3304 ? Ss
03:44 0:02 /usr/sbin/httpd
#apache进程的域是httpd_t
!

[root@localhost ~]# ls -dZ /var/www/html/
drwxr-xr-x.root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
#/var/www/html/目录的类型是httpd_sys_content_t
  • apache 进程的域是httpd_t/var/www/html/目录的类型是httpd_sys_content_t,这个主体的安全上下文类型经过策略规则的比对,是和目标的安全上下文类型匹配的,所以 apache 进程可以访问/var/www/html/目录。
  • 在 SELinux 中最常遇到的问题就是进程的域和文件的类型不匹配,所以一定要掌握如何修改类型字段。

4、灵敏度

  • 灵敏度一般用 s0、s1、s2 来命名,数字代表灵敏度的分级。数值越大代表灵敏度越高。

5、类别

  • 类别字段不是必须有的,所以使用lsps命令查询时并没有看到类别字段。
  • 可以通过 seinfo 命令来查询:
# 查询所有的user字段,并查看详细信息
seinfo -u -x
:<<!
system_u
#user字段名
default level:s0
#默认灵敏度
range:s0 - s0:c0.c1023
#灵敏度可以识别的类别
roles:
#该user能够匹配的role(角色)
object_r
system_r
unconfined_r
!

关注公众号 “融码一生”,领取全套 PDF / 电子书


本文转载自: https://blog.csdn.net/m0_66491750/article/details/137534631
版权归原作者 融码一生 所有, 如有侵权,请联系我们删除。

“6.6.6、查看 SELinux 安全上下文”的评论:

还没有评论