如何查找/列出文件系统上具有特定 SELinux“fcontext”的所有文件

如何查找/列出文件系统上具有特定 SELinux“fcontext”的所有文件

我无法找到关于什么命令的信息,大概是来自setools,我应该使用它来查找文件系统上由 SELinux 标记为特定文件上下文 ( fcontext) 的所有文件。


此刻我可以手动列出文件及其各自的fcontext文件/etc/selinux/targeted/contexts/files,然后是我想查看的grep具体内容。fcontext

[root@FedPadSSD files]# cat file_contexts |grep ifconfig_exec_t
/bin/ip --      system_u:object_r:ifconfig_exec_t:s0
/sbin/ip        --      system_u:object_r:ifconfig_exec_t:s0
/sbin/tc        --      system_u:object_r:ifconfig_exec_t:s0
/usr/bin/ip     --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/ip    --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/tc    --      system_u:object_r:ifconfig_exec_t:s0
/sbin/ethtool   --      system_u:object_r:ifconfig_exec_t:s0
/sbin/ifconfig  --      system_u:object_r:ifconfig_exec_t:s0
/sbin/iwconfig  --      system_u:object_r:ifconfig_exec_t:s0
/sbin/mii-tool  --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/ethtool       --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/ifconfig      --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/iwconfig      --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/mii-tool      --      system_u:object_r:ifconfig_exec_t:s0
/sbin/ipx_configure     --      system_u:object_r:ifconfig_exec_t:s0
/sbin/ipx_interface     --      system_u:object_r:ifconfig_exec_t:s0
/sbin/ipx_internal_net  --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/ipx_configure --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/ipx_interface --      system_u:object_r:ifconfig_exec_t:s0
/usr/sbin/ipx_internal_net      --      system_u:object_r:ifconfig_exec_t:s0

这样做的问题是,大多数时候,当你这样做时,似乎会出现一些错误或缺失/不完整的情况手动因为它与 SELinux“数据库”相关(因为没有更好的词)。 因此,我想知道setools包或相关包中是否已经存在某些东西,可以实现此目的,而不必费心处理系统范围的配置文件。

答案1

semanage fcontext -l | grep whatever_exec_t可能是找到特定上下文的标签规则的最佳方法。

如果您希望搜索当前文件上下文而不是标签规则,则可以使用ls -Z,但 SELinux 感知find支持 的-context <glob>测试和%Z格式说明符-printf。请注意,整个上下文字符串都与 匹配<glob>,因此仅在与类型匹配时使用通配符。我的 Centos 7.3 上的示例:

#find / -xdev -type f -context '*ifconfig_exec_t*' -printf '%-50Z%p\n'
system_u:object_r:ifconfig_exec_t:s0              /usr/sbin/ip
unconfined_u:object_r:ifconfig_exec_t:s0          /usr/sbin/ifconfig
system_u:object_r:ifconfig_exec_t:s0              /usr/sbin/ethtool
system_u:object_r:ifconfig_exec_t:s0              /usr/sbin/iw
unconfined_u:object_r:ifconfig_exec_t:s0          /usr/sbin/mii-tool
system_u:object_r:ifconfig_exec_t:s0              /usr/sbin/tc

答案2

如果您的发行版打包了ifconfig_selinux手册页(Fedora 将其包含在selinux-策略开发),它会告诉你:

   The following file types are defined for ifconfig:

   ifconfig_exec_t

   - Set files with the ifconfig_exec_t type, if you want to transition an
   executable to the ifconfig_t domain.

   Paths:
        /bin/ip,    /sbin/ip,    /sbin/tc,    /usr/bin/ip,   /usr/sbin/ip,
        /usr/sbin/tc,   /sbin/ethtool,   /sbin/ifconfig,   /sbin/iwconfig,
        /sbin/mii-tool,       /usr/sbin/ethtool,       /usr/sbin/ifconfig,
        /usr/sbin/iwconfig,    /usr/sbin/mii-tool,    /sbin/ipx_configure,
        /sbin/ipx_interface, /sbin/ipx_internal_net, /usr/sbin/ipx_config‐
        ure, /usr/sbin/ipx_interface, /usr/sbin/ipx_internal_net

您还可以使用 ifconfig_exec_tsesearch -all -t ifconfig_exec_t来查看对目标为 ifconfig_exec_t 的文件进行哪些转换,这可能会帮助您找到具有该上下文的文件。

答案3

目前在 RHEL7.1 上——我不确定这是否一直存在并且我错过了——我可以执行以下命令来获取所有文件上下文的列表,然后将输出通过管道传输到grep

# semanage fcontext -l |grep ifconfig_exec_t
/bin/ip                                            regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/ethtool                                      regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/ifconfig                                     regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/ip                                           regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/ipx_configure                                regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/ipx_interface                                regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/ipx_internal_net                             regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/iw                                           regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/iwconfig                                     regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/mii-tool                                     regular file       system_u:object_r:ifconfig_exec_t:s0 
/sbin/tc                                           regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/bin/ip                                        regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/ethtool                                  regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/ifconfig                                 regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/ip                                       regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/ipx_configure                            regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/ipx_interface                            regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/ipx_internal_net                         regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/iw                                       regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/iwconfig                                 regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/mii-tool                                 regular file       system_u:object_r:ifconfig_exec_t:s0 
/usr/sbin/tc                                       regular file       system_u:object_r:ifconfig_exec_t:s0

答案4

find 命令允许您按安全上下文进行搜索。

例如,让我们搜索“unlabeled_t”类型的所有文件。

find / -type f -context *unlabeled_t*

第一部分“find / -type f”告诉我们搜索系统上的所有常规文件。

“-context *unlabeled_t*”过滤器向我们显示 unlabeled_t 类型的所有文件。我们必须在开头和结尾使用通配符,因为我们不关心开头的用户/角色,也不关心结尾的 MLS/MCS 上下文。

相关内容