SELinux策略语言--客体类别和许可

本文详细介绍了SELinux策略语言中的客体类别和许可,包括客体类别的用途、定义方法以及有效的客体类别和许可。内容涵盖文件、网络、System V IPC和杂项等四大类客体类别,同时深入解析了文件和进程的许可控制,阐述了SELinux如何通过精细的访问控制增强系统安全性。

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

               

1. 简介

    SELinux策略语言主要描述policy.conf的相关语法,其相关部分如下图所示:


2. 客体类别

    定义内核支持的客体类别和许可的策略语言指令,并对SELinux系统中内核客体类别标准做一个概述。

2.1 SELinux中客体类别的用途

      客体类别及其许可是SELinux中访问控制的基础,客体类别代表资源的范畴,如文件和套接字,许可代表对这些资源的访问权限,如读或发送。理解客体类别和许可是SELinux中比较困难的部分,因为这需要SELinux和Linux两方面的知识。

       一个客体类别代表某个确定类型(如文件或套接字)的所有资源,一个客体类别的实例(如某个特定的文件或套接字)被称为一个客体,通常,客体类别和客体这两个术语可以交替使用,但是理解其定义是相当重要的,客体类别指的是资源(文件)的所有范畴,客体指的是客体类别的某个特定实例(/etc/passwd)。

2.2 在SELinux策略中定义客体类别

      策略中必须包括所有SELinux内核支持的客体类别和许可的声明,以及其他客体管理器。

      添加新的客体类别和修改现有客体类别的许可是一项复杂的任务,仅当修改真实系统代码本身时应该这样做,与SELinux策略语言的其他方面不同,客体类别和许可依赖于Linux的实现细节,特别是内核。实际上,客体类别和许可被设计为尽可能准确地代表系统执行的资源,正是由于这个原因,改变客体类别或在系统中改变对应的许可才变得有意义。

      声明许可有两种方法,第一种叫做通用许可(被多个客体类别所共用),它允许我们创建与客体类别一起作为一个组的许可,通用许可在类似的客体类别(如文件和符号连接)共享一套访问许可时很有用;第二种方法叫做特定类别许可(由某个客体类别所独用),它允许我们单独为客体类别声明特定的许可,正如将会看到的,有一些客体类别只有特定的许可,有一些只有通用许可,还有一些是这两者都有。

      客体类别和许可定义方法如下:

       • 声明客体类别:class 类别名字
       • 通用许可:common 通用名 {许可集}
       • 联合许可和客体类别:class 类别名 [inherits 通用许可集名] [{许可集}]

2.3 有效的客体类别和许可

       在Kernel3.0.36客体类别和许可定义如下(定义见kernel/security/selinux/include/classmap.h),共有49个客体类别 被定义:   

#define COMMON_FILE_SOCK_PERMS "ioctl", "read", "write", "create", \    "getattr", "setattr", "lock", "relabelfrom", "relabelto", "append"#define COMMON_FILE_PERMS COMMON_FILE_SOCK_PERMS, "unlink", "link", \    "rename", "execute", "swapon", "quotaon", "mounton", "audit_access", \    "open", "execmod"#define COMMON_SOCK_PERMS COMMON_FILE_SOCK_PERMS, "bind", "connect", \    "listen", "accept", "getopt", "setopt", "shutdown", "recvfrom",  \    "sendto", "recv_msg", "send_msg", "name_bind"#define COMMON_IPC_PERMS "create", "destroy", "getattr", "setattr", "read", \     "write", "associate", "unix_read", "unix_write"/* * Note: The name for any socket class should be suffixed by "socket", *  and doesn't contain more than one substr of "socket". */struct security_class_mapping secclass_map[] = {
    
     { "security", //客体类别   { "compute_av", "compute_create", "compute_member", //许可     "check_context", "load_policy", "compute_relabel",     "compute_user", "setenforce", "setbool", "setsecparam",     "setcheckreqprot", "read_policy", NULL } }, { "process"//客体类别   { "fork", "transition", "sigchld", "sigkill",     "sigstop", "signull", "signal", "ptrace", "getsched", "setsched",     "getsession", "getpgid", "setpgid", "getcap", "setcap", "share",     "getattr", "setexec", "setfscreate", "noatsecure", "siginh",     "setrlimit", "rlimitinh", "dyntransition", "setcurrent",     "execmem", "execstack", "execheap", "setkeycreate",     "setsockcreate", NULL } }, { 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值