侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux sesearch命令教程:查询 SELinux 策略规则(附实例详解和注意事项)

Linux sesearch 命令介绍

sesearch(SELinux policy query tool),用于在 SELinux 策略中搜索特定的规则。sesearch 支持加载四种格式的 SELinux 策略:

  • source:一个包含 12 到 21 版本的策略源代码的文本文件。这个文件通常叫做 policy.conf。
  • binary:一个包含 15 到 21 版本的单一内核二进制策略的文件。这个文件通常根据版本命名,例如 policy.20。
  • modular:一个包含可加载策略模块的策略包的列表。第一个列出的模块必须是一个基础模块。
  • policy list:一个包含加载策略所需的所有信息的文本文件,通常由 SETools 图形化工具导出。

如果没有提供策略文件,sesearch 将搜索系统默认的策略:首先检查源策略,然后检查与运行内核的首选版本匹配的二进制策略,最后检查找到的最高版本。在后一种情况下,策略将降级以匹配运行的系统。如果没有找到策略,sesearch 将打印一个错误信息并退出。

Linux sesearch 命令适用的 Linux 版本

sesearch 命令适用于大多数 Linux 发行版,只要它们支持 SELinux 功能。如果您的系统没有安装 sesearch 命令,您可以根据您的发行版使用以下命令来安装它:

# 基于 apt 的发行版(如 Debian、Ubuntu、Raspbian、Kali Linux 等):
sudo apt-get install setools

# 基于 yum 的发行版(如 RedHat,CentOS 7 等):
sudo yum install setools-console

# 基于 dnf 的发行版(如 Fedora,CentOS 8 等):
sudo dnf install setools-console

# 基于 apk 的发行版(如 Alpine Linux):
sudo apk add --update setools

# 基于 pacman 的发行版(如 Arch Linux):
sudo pacman -S setools

# 基于 zypper 的发行版(如 openSUSE):
sudo zypper in setools

# 基于 pkg 的 FreeBSD 发行版
sudo pkg install setools

# 基于 pkg 的 OS X/macOS 发行版:
brew install setools

Linux sesearch 命令的基本语法

sesearch 命令的基本语法如下:

sesearch [OPTIONS] RULE_TYPE [RULE_TYPE ...] [EXPRESSION] [POLICY ...]

其中,OPTIONS 是一些可选的参数,用于控制 sesearch 的行为;RULE_TYPE 是要搜索的规则的类型,至少要指定一个;EXPRESSION 是一个包含规则字段值的表达式,用于过滤搜索结果;POLICY 是要搜索的策略文件,可以是多个。

Linux sesearch 命令的常用选项或参数说明

sesearch 命令的常用选项或参数如下表所示,按照字母顺序排序:

选项参数说明
-A搜索 allow 规则
--all搜索所有规则类型
-bNAME搜索包含 NAME 的条件表达式的条件规则
-cNAME搜索对象类为 NAME 的规则
--dontaudit搜索 dontaudit 规则
--neverallow搜索 neverallow 规则
-pP1 [,P2,...]搜索至少包含一个指定权限的规则
-r以原始格式输出规则
--role_allow搜索 role allow 规则
--role_sourceNAME搜索源角色为 NAME 的规则
--role_targetNAME搜索目标角色为 NAME 的规则
-sNAME搜索源类型/属性为 NAME 的规则
-tNAME搜索目标类型/属性为 NAME 的规则
-T搜索 type_transition, type_member, 和 type_change 规则
--range_trans搜索 range_transition 规则
--role_trans搜索 role_transition 规则

Linux sesearch 命令实例详解

以下是一些 sesearch 命令的常见实例,结合最常搜索的关键词来作为标题。

实例1:搜索所有的 allow 规则

如果我们想要查看 SELinux 策略中的所有 allow 规则,我们可以使用 -A 选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch -A
Found 0 semantic av rules:

这里我们没有找到任何 allow 规则,这是因为我们的系统使用的是二进制策略,而 sesearch 默认搜索的是源策略。为了解决这个问题,我们可以使用 -b 选项来指定二进制策略的路径,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch -A -b /etc/selinux/targeted/policy/policy.31

实例2:搜索特定的 allow 规则

如果我们想要查看 SELinux 策略中的特定的 allow 规则,我们可以使用 -s、-t、-c 和 -p 选项来指定源类型、目标类型、对象类和权限,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch -A -s httpd_t -t user_home_t -c file -p read
Found 1 semantic av rules:
   allow httpd_t user_home_type : file { ioctl read getattr lock open } ;

这里我们找到了一个 allow 规则,表示 httpd_t 类型的进程可以对 user_home_type 类型的文件执行 ioctl、read、getattr、lock 和 open 操作。

实例3:搜索所有的 type_transition 规则

如果我们想要查看 SELinux 策略中的所有 type_transition 规则,我们可以使用 -T 选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch -T
Found 0 semantic te rules:

这里我们没有找到任何 type_transition 规则,这是因为我们的系统使用的是二进制策略,而 sesearch 默认搜索的是源策略。为了解决这个问题,我们可以使用 -b 选项来指定二进制策略的路径,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch -T -b /etc/selinux/targeted/policy/policy.31
Found 10 semantic te rules:
   type_transition initrc_t initrc_tmp_t : file initrc_tmp_t; 
   type_transition initrc_t initrc_var_run_t : file initrc_var_run_t; 
   type_transition initrc_t var_lock_t : file var_lock_t; 
   type_transition initrc_t var_run_t : file var_run_t; 
   type_transition initrc_t devpts_t : chr_file devpts_t; 
   type_transition initrc_t devtty_t : chr_file devtty_t; 
   type_transition initrc_t device_t : blk_file device_t; 
   type_transition initrc_t device_t : chr_file device_t; 
   type_transition initrc_t device_t : dir device_t; 
   type_transition initrc_t device_t : lnk_file device_t;

这里我们找到了 10 个 type_transition 规则,表示 initrc_t 类型的进程在创建或访问不同类型的文件或设备时,会触发类型转换。

实例4:搜索特定的 type_transition 规则

如果我们想要查看 SELinux 策略中的特定的 type_transition 规则,我们可以使用 -s、-t、-c 和 --default 选项来指定源类型、目标类型、对象类和默认类型,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch -T -s initrc_t -t device_t -c chr_file --default device_t
Found 1 semantic te rules:
   type_transition initrc_t device_t : chr_file device_t;

这里我们找到了一个 type_transition 规则,表示 initrc_t 类型的进程在访问 device_t 类型的字符设备时,会转换为 device_t 类型。

实例5:搜索所有的 role_allow 规则

如果我们想要查看 SELinux 策略中的所有 role_allow 规则,我们可以使用 --role_allow 选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --role_allow
Found 0 semantic role allow rules:

这里我们没有找到任何 role_allow 规则,这是因为我们的系统使用的是二进制策略,而 sesearch 默认搜索的是源策略。为了解决这个问题,我们可以使用 -b 选项来指定二进制策略的路径,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --role_allow -b /etc/selinux/targeted/policy/policy.31
Found 3 semantic role allow rules:
   role allow system_r system_r; 
   role allow system_r object_r; 
   role allow system_r staff_r;

这里我们找到了 3 个 role_allow 规则,表示 system_r 角色可以访问 system_r、object_r 和 staff_r 角色。

实例6:搜索特定的 role_allow 规则

如果我们想要查看 SELinux 策略中的特定的 role_allow 规则,我们可以使用 --role_source 和 --role_target 选项来指定源角色和目标角色,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --role_allow --role_source system_r --role_target staff_r
Found 1 semantic role allow rules:
   role allow system_r staff_r;

这里我们找到了一个 role_allow 规则,表示 system_r 角色可以访问 staff_r 角色。

实例7:搜索所有的 neverallow 规则

如果我们想要查看 SELinux 策略中的所有 neverallow 规则,我们可以使用 --neverallow 选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --neverallow
Found 0 semantic av rules:

这里我们没有找到任何 neverallow 规则,这是因为我们的系统使用的是二进制策略,而 sesearch 默认搜索的是源策略。为了解决这个问题,我们可以使用 -b 选项来指定二进制策略的路径,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --neverallow -b /etc/selinux/targeted/policy/policy.31
Found 2 semantic av rules:
   neverallow { domain -initrc_t } initrc_t : process transition ; 
   neverallow { domain -initrc_t } initrc_t : process { dyntransition siginh noatsecure rlimitinh } ;

这里我们找到了 2 个 neverallow 规则,表示除了 initrc_t 类型之外的任何类型的进程都不能转换为 initrc_t 类型,也不能继承或修改 initrc_t 类型进程的一些属性。

实例8:搜索特定的 neverallow 规则

如果我们想要查看 SELinux 策略中的特定的 neverallow 规则,我们可以使用 -s、-t、-c 和 -p 选项来指定源类型、目标类型、对象类和权限,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --neverallow -s httpd_t -t user_home_t -c file -p write
Found 1 semantic av rules:
   neverallow httpd_t user_home_type : file { write create setattr unlink link rename } ;

这里我们找到了一个 neverallow 规则,表示 httpd_t 类型的进程不能对 user_home_type 类型的文件执行 write、create、setattr、unlink、link 和 rename 操作。

实例9:搜索所有的 auditallow 规则

如果我们想要查看 SELinux 策略中的所有 auditallow 规则,我们可以使用 --auditallow 选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --auditallow
Found 0 semantic av rules:

这里我们没有找到任何 auditallow 规则,这是因为我们的系统使用的是二进制策略,而 sesearch 默认搜索的是源策略。为了解决这个问题,我们可以使用 -b 选项来指定二进制策略的路径,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --auditallow -b /etc/selinux/targeted/policy/policy.31
Found 1 semantic av rules:
   auditallow initrc_t initrc_tmp_t : file { write create setattr unlink link rename } ;

这里我们找到了一个 auditallow 规则,表示 initrc_t 类型的进程对 initrc_tmp_t 类型的文件执行 write、create、setattr、unlink、link 和 rename 操作时,会被记录到审计日志中。

实例10:搜索特定的 auditallow 规则

如果我们想要查看 SELinux 策略中的特定的 auditallow 规则,我们可以使用 -s、-t、-c 和 -p 选项来指定源类型、目标类型、对象类和权限,如下所示:

[linux@bashcommandnotfound.cn ~]$ sesearch --auditallow -s initrc_t -t initrc_tmp_t -c file -p write
Found 1 semantic av rules:
   auditallow initrc_t initrc_tmp_t : file { write create setattr unlink link rename } ;

这里我们找到了一个 auditallow 规则,表示 initrc_t 类型的进程对 initrc_tmp_t 类型的文件执行 write、create、setattr、unlink、link 和 rename 操作时,会被记录到审计日志中。

Linux sesearch 命令的注意事项

在使用 sesearch 命令时,有以下几点需要注意:

  • sesearch 命令默认搜索的是源策略,如果您的系统使用的是二进制策略,您需要使用 -b 选项来指定二进制策略的路径。
  • sesearch 命令的输出可能会根据您的系统和策略的不同而有所差异,您可以使用 -r 选项来以原始格式输出规则,以便于比较和分析。
  • sesearch 命令的搜索结果是基于逻辑的,而不是基于实际的策略决策。这意味着 sesearch 命令可能会显示一些在实际情况下不会生效的规则,例如被 neverallow 规则覆盖的 allow 规则,或者被布尔值关闭的条件规则。您可以使用 --cond 来显示条件规则的状态,或者使用 --enabled 来只显示生效的规则。
  • 如果您在使用 sesearch 命令时遇到 bash: sesearch: command not found 的错误,您需要根据您的发行版使用相应的命令来安装 sesearch 命令,具体的安装方法已经在上面介绍过了。
0

评论区