Linux seinfo命令介绍
seinfo(Security Enhanced Information)是一个用于查询SELinux策略组件的工具¹。您可以使用这个工具分析二进制或源策略文件,了解策略中包含的用户、角色、类型、属性、布尔值等信息²。这对于理解和调试SELinux的安全机制非常有用。
Linux seinfo命令适用的Linux版本
seinfo命令适用于大多数支持SELinux的Linux发行版,如Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian等。如果您的系统没有安装seinfo命令,您可以使用以下命令安装setools-console包,该包包含了seinfo和其他SELinux相关的工具¹:
[linux@bashcommandnotfound.cn ~]$ # 基于apt的发行版(如Debian、Ubuntu、Raspbian、Kali Linux等):
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于yum的发行版(如RedHat,CentOS 7等):
[linux@bashcommandnotfound.cn ~]$ sudo yum install setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于dnf的发行版(如Fedora,CentOS 8等):
[linux@bashcommandnotfound.cn ~]$ sudo dnf install setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于apk的发行版(如Alpine Linux):
[linux@bashcommandnotfound.cn ~]$ sudo apk add --update setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于pacman的发行版(如Arch Linux):
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于zypper的发行版(如openSUSE):
[linux@bashcommandnotfound.cn ~]$ sudo zypper in setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于pkg的FreeBSD发行版
[linux@bashcommandnotfound.cn ~]$ sudo pkg install setools-console
[linux@bashcommandnotfound.cn ~]$ # 基于pkg的OS X/macOS发行版:
[linux@bashcommandnotfound.cn ~]$ brew install setools-console
Linux seinfo命令的基本语法
seinfo命令的基本语法格式如下:
seinfo [OPTIONS] [EXPRESSION] [POLICY ...]
其中,OPTIONS是一些可选的参数,用于控制输出的格式和内容;EXPRESSION是一些指定的策略组件类型,用于查询特定的信息;POLICY是一个或多个策略文件,用于加载和分析。如果没有指定POLICY,seinfo会自动搜索系统默认的策略文件²。
Linux seinfo命令的常用选项或参数说明
seinfo命令支持的选项或参数有很多,这里只列举一些最常用的,按照字母顺序排序:
选项 | 参数 | 说明 |
---|---|---|
-a | NAME | 查询一个或所有的类型属性,如果指定了NAME,就查询该属性的信息 |
-b | NAME | 查询一个或所有的条件布尔值,如果指定了NAME,就查询该布尔值的信息 |
-c | NAME | 查询一个或所有的对象类,如果指定了NAME,就查询该对象类的信息 |
-h | 无 | 显示帮助信息并退出 |
-r | NAME | 查询一个或所有的角色,如果指定了NAME,就查询该角色的信息 |
-s | 无 | 显示策略的统计信息 |
-t | NAME | 查询一个或所有的类型(不包括别名或属性),如果指定了NAME,就查询该类型的信息 |
-u | NAME | 查询一个或所有的用户,如果指定了NAME,就查询该用户的信息 |
-x | 无 | 显示扩展的信息,例如对象类的权限,类型的属性,角色的类型,用户的角色等 |
Linux seinfo命令实例详解
下面是一些使用seinfo命令的常见实例,结合了最常搜索的关键词,如SELinux策略、类型、角色、用户、布尔值等。
实例1:查询SELinux策略的版本和类型
如果没有指定任何选项或参数,seinfo命令会显示策略的版本和类型,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo
Policy Version & Type: v.31 (binary, mls)
这里显示的是一个二进制的多级安全(MLS)策略,版本是31。
实例2:查询SELinux策略的统计信息
如果使用-s选项,seinfo命令会显示策略的统计信息,包括策略中包含的各种组件的数量,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -s
这里显示了策略中包含的类、权限、敏感度、类别、类型、属性、用户、角色、布尔值、条件表达式、访问向量规则、类型转换规则、角色转换规则、范围转换规则、约束、初始SID、文件系统使用、通用文件系统上下文、端口上下文、网络接口上下文、节点上下文、宽容类型、策略能力等的数量。
实例3:查询SELinux策略中的对象类
如果使用-c选项,seinfo命令会显示策略中定义的所有对象类的名称,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -c
实例4:查询SELinux策略中的类型
如果使用-t选项,seinfo命令会显示策略中定义的所有类型(不包括别名或属性)的名称,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -t
实例5:查询SELinux策略中的一个对象类的信息
如果使用-c选项并指定一个对象类的名称,seinfo命令会显示该对象类的信息,包括该对象类的权限和访问向量规则,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -c file
这里显示了file对象类的权限和允许的访问向量规则的数量。
实例6:查询SELinux策略中的类型属性
如果使用-a选项,seinfo命令会显示策略中定义的所有类型属性的名称,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -a
实例7:查询SELinux策略中的用户
如果使用-u选项,seinfo命令将显示策略中定义的所有用户的名称,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -u
实例8:查询SELinux策略中的角色
使用-r选项,seinfo命令将显示策略中定义的所有角色的名称,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -r
实例9:查询SELinux策略中的布尔值
使用-b选项,seinfo命令将显示策略中定义的所有布尔值的名称,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -b
实例10:查询SELinux策略中的一个用户的信息
如果使用-u选项并指定一个用户的名称,seinfo命令将显示该用户的信息,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -u user_u
这里将显示选定用户拥有的角色和每个角色对应的类型范围。
实例11:查询属性成员
如果使用-a选项并指定一个属性的名称,seinfo命令将显示所有带有该属性的类型,例如:
[linux@bashcommandnotfound.cn ~]$ seinfo -a domain
seinfo命令注意事项
在使用Linux seinfo命令的过程中,存在以下一些需要注意的事项:
-
SELinux的状态:SELinux的状态可能影响你使用seinfo命令的结果。如果SELinux被关闭或设置为宽容模式,seinfo可能无法正确显示策略规则。因此,你需要确保SELinux在使用seinfo命令时处于启用的状态。
-
命令的权限:seinfo命令通常需要管理员权限才能完全使用。如果你在无管理员权限的情况下运行seinfo,可能会看到“Permission denied”错误。避免这种情况的方法是使用
sudo
或切换到root用户。 -
命令未找到:如果系统中未安装SELinux或seinfo工具,可能会遇到“bash: seinfo: command not found”错误。这意味着需要先安装seinfo工具(一般情况下,seinfo包含在SELinux的策略分析工具setools中,通过安装setools可以得到seinfo)。
-
正确的参数使用:seinfo命令有许多可以使用的参数,使用参数时需要确保其正确性。例如,使用
-a
参数时,如果后面跟的不是一个有效的策略名称,那么seinfo命令可能会报错。
评论区