博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux资源的SELinux context详解
阅读量:4179 次
发布时间:2019-05-26

本文共 3580 字,大约阅读时间需要 11 分钟。

Linux操作系统中的每个资源(如进程、文件描述符、文件、网络等),也被称为SELinux对象,都拥有一个特别的security label,也被称为SELinux label,或SELinux context,以表示该对象能够执行的permissions和operations。这是一个标识符,从Linux系统的细节中抽象出,只聚焦于系统资源的安全属性。通过使用SELinux context,就可以在SELinux策略的中,一致而正确地引用一个系统资源。

1. SELinux context的组成

SELinux context就是一个冒号分隔的字符串,包含4个部分:

user:role:type:range

1) range是可选的,也被称为MLS/MCS security range,或者MLS/MCS security level。

2) 对于安全策略而言,一个SELinux user就是一个标识符。SELinux user是从Linux user映射而来,名称有所变化,带上后缀_u。两者之间的最大不同是,Linux user可以通过su/sudo改变权限,而SELinux user永远不能,除非系统重启。

查看全部SELinux users(需要安装setools-console软件包),可以执行如下命令:

[root@myhost ~]# seinfo -uUsers: 8   sysadm_u   system_u   xguest_u   root   guest_u   staff_u   user_u   unconfined_u

查看Linux/SELinu user之间的映射关系(需要安装policycoreutils-python软件包),可以执行如下命令:

[root@myhost ~]# semanage login -lLogin Name           SELinux User         MLS/MCS Range        Service__default__          unconfined_u         s0-s0:c0.c1023       *root                 unconfined_u         s0-s0:c0.c1023       *system_u             system_u             s0-s0:c0.c1023       *

说明,Linux非root用户默认被映射为SELinux unconfined_u,即不受限制;Linux root默认被映射为SELinux unconfined_u,即不受限制;system_u是个特殊的SELinux用户标识符,专用于系统进程和系统对象,永远不要将其与Linux用户关联。

3) 一个SELinux user可能拥有多个roles,这里的role是由SELinux的策略定义的,与Linux系统用户管理部分的role无关。SELinux  role的名称都以_r后缀。另外,任何一个系统资源都默认拥有一个名为object_r的role。

查看全部SELinux roles(需要安装setools-console软件包),可以执行如下命令:

[root@myhost ~]# seinfo -rRoles: 14   auditadm_r   dbadm_r   guest_r   staff_r   user_r   logadm_r   object_r   secadm_r   sysadm_r   system_r   webadm_r   xguest_r   nx_server_r   unconfined_r

4) SELinux type用于定义一个进程所属的domain、或一个文件的类型。在SELinux的策略中,大多数的规则都是基于SELinux type定义的。这是SELinux策略检查的关键参数。如通过entrypoint,实现不同type之间的互相访问。

SELinux type的命名以_t结尾。示例如下:

  • Web server(如Apache、 Nginx、 Tomcat)的type为httpd_t
  • Web server的端口的type为http_port_t
  • Web server的docroot目录/var/www/html/的type为httpd_sys_content_t
  • /tmp或/var/tmp目录的type为tmp_t
  • MySQL的type为mysqld_db_t

查看全部SELinux types(需要安装setools-console软件包),可以执行如下命令,types太多,这里就不给出结果了:

seinfo -t

常见Linux内核资源的SELinux type如下:

  • kernel_t
  • init_t
  • fs_t
  • unconfined_service_t
  • unconfined_t

2. SELinux context的典型操作

1) 查看一个文件temp.log的SELinux context

        SELinux context存储于文件系统的扩展属性。
        [root@serobidvmm02 bidvmm]# ls -Z temp.log
        -rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 temp.log
        或
        getfattr -n security.selinux temp.log

2) 查看一个进程(特别是服务的daemon进程)的SELinux context

        从RHEL/CentOS 6.6开始,Nginx的SELinux context的label为httpd_t,查看Ngnix服务的SELinux context:
            ps auZ | grep nginx
            ps -e --context | grep nginx
            ps -eZ | grep nginx
        httpd_t的SELinux context,允许Ngnix监听常见的Web服务器端口,允许Nginx访问/etc/nginx目录下的配置文件,允许访问标准的docroot路径/usr/share/nginx。但是不允许代理请求到upstream,不允许通过sockets与其他进程通信。

3) 查看当前shell的SELinux context

        id -Z

4)改变一个文件的SELinux context

        chcon -t user_home_t /tmp/myfile
            说明:将文件/tmp/myfile的SELinux type修改为user_home_t

5)持久改变一个文件的SELinux context

        semanage fcontext -a -t user_home_t /var/cache/myfile
        restorecon /var/cache/myfile
            说明:将文件/tmp/myfile的SELinux user修改为system_u;将文件/tmp/myfile的SELinux type修改为user_home_t

6)改变当前shell的SELinux context(需要密码)

        newrole -r system_r -t unconfined_t
            说明:将当前shell的的SELinux role修改为system_r,SELinux type修改为user_home_t

7) 启动应用/bin/bash,临时改变其SELinux context

        runcon system_u:system_r:crond_t:s0:c0.c255 /bin/bash

8) 重置文件的SELinux context

        restorecon /var/cache/myfile

9) 查找所有策略规则,其中source type=httpd_t,boolean=httpd_can_network_relay

        sesearch -A -s httpd_t -b httpd_can_network_relay

10) 查看http_port_t类型的端口

        semanage port -l | grep http_port_t

11) 查看8080端口的SELinux type

        semanage port -l | grep 8080

12) 设置端口8088为http_port_t类型

        semanage port -a -t http_port_t -p tcp 8088

参考链接:

转载地址:http://vhlai.baihongyu.com/

你可能感兴趣的文章
60个优秀的免费3D模型下载网站
查看>>
Cardboard虚拟现实开发初步(三)
查看>>
Android native和h5混合开发几种常见的hybrid通信方式
查看>>
Vista/Win7 UAC兼容程序开发指南
查看>>
IOS程序开发框架
查看>>
安装jdk的步骤
查看>>
简述JAVA运算符
查看>>
简易ATM源代码及运行结果
查看>>
简述Java中的简单循环
查看>>
用JAVA实现各种乘法表
查看>>
for双重循环实现图形
查看>>
Java类和对象基础
查看>>
简述Java继承和多态
查看>>
Java中Arrays工具类的用法
查看>>
简述JAVA抽象类和接口
查看>>
JAVA常用基础类
查看>>
简述Java异常处理
查看>>
简述Java集合框架
查看>>
jQuery+ajax实现省市区(县)下拉框三级联动
查看>>
Spring中的AOP 面向切面编程
查看>>