SELinux文件路径上下文不与正则表达式一起使用

前端之家收集整理的这篇文章主要介绍了SELinux文件路径上下文不与正则表达式一起使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我根据评论中的建议重新格式化了可读性.

我有一个使用谷歌身份验证器的RADIUS服务器,SELinux阻止RADIUS访问用户主目录中的.google_authenticator文件(这些也是winbind用户,家庭目录在/ home / API中).我试图通过构建以下策略文件来授予它访问权限:

$cat ./google-authenticator.fc 
/home/API(/.*)?/\.google_authenticator      gen_context(system_u:object_r:radiusd_google_authenticator_t,s0)
$cat ./google-authenticator.te
policy_module(radiusd_google_authenticator,0.0.10)

require {
  type radiusd_t;
  type user_home_dir_t;
  type admin_home_t;
}

type radiusd_google_authenticator_t;

role object_r types radiusd_google_authenticator_t;

allow radiusd_t radiusd_google_authenticator_t:file { rename create unlink rw_file_perms };

files_type(radiusd_google_authenticator_t)
filetrans_pattern(radiusd_t,user_home_dir_t,radiusd_google_authenticator_t,file,".google_authenticator")
filetrans_pattern(radiusd_t,admin_home_t,".google_authenticator")

安装它们会显示semanage fcontext -l中的路径,但它不起作用:

$sudo semanage fcontext -l | grep google_authenticator
 /home/API(/.*)?/\.google_authenticator             all files          system_u:object_r:radiusd_google_authenticator_t:s0 
 $matchpathcon /home/API/tcr/.google_authenticator
 /home/API/tcr/.google_authenticator    unconfined_u:object_r:user_home_t:s0

奇怪的是,当我更改它以使路径完全匹配时(即使是转义期间),它的工作原理如下:

$sudo semanage fcontext -l | grep google_authenticator
/home/API/tcr/\.google_authenticator               all files          system_u:object_r:radiusd_google_authenticator_t:s0 
$matchpathcon /home/API/tcr/.google_authenticator
/home/API/tcr/.google_authenticator system_u:object_r:radiusd_google_authenticator_t:s0

甚至更奇怪的是,正如Iain的答案中所建议的那样,正则表达式使用semanage直接添加路径而不是策略文件(首先删除策略路径以便不存在冲突):

$sudo semanage fcontext -l | grep google_authenticator
$matchpathcon /home/API/tcr/.google_authenticator
/home/API/tcr/.google_authenticator unconfined_u:object_r:user_home_t:s0
$sudo semanage fcontext -a -t radiusd_google_authenticator_t '/home/API(/.*)?/\.google_authenticator'
$sudo semanage fcontext -l | grep google_authenticator
/home/API(/.*)?/\.google_authenticator             all files          system_u:object_r:radiusd_google_authenticator_t:s0 
$matchpathcon /home/API/tcr/.google_authenticator
/home/API/tcr/.google_authenticator system_u:object_r:radiusd_google_authenticator_t:s0

我也尝试过使用HOME_DIR的各种设置,但也没有运气.

解决方法

尝试使用
HOME_DIR/\.google_authenticator -- gen_context(system_u:object_r:radiusd_google_authenticator_t,s0)

代替.主目录不一定在/ home中,当您重建策略时,它将充当宏.

编辑

所以我检查了源代码,它提供了以下文本,可能表明这里发生了什么.

label_file.c
680     /*
681      * Check for matching specifications in reverse order,so that
682      * the last matching specification is used.
683      */

匹配最后的正则表达式,赢. SELinux库使用以下文件查找顺序来匹配:

/etc/selinux/targeted/contexts/files/file_contexts.subs_dist
/etc/selinux/targeted/contexts/files/file_contexts.subs
/etc/selinux/targeted/contexts/files/file_contexts
/etc/selinux/targeted/contexts/files/file_contexts.homedirs
/etc/selinux/targeted/contexts/files/file_contexts.local

在您的情况下赢得的匹配正则表达式是这样的:

grep user_home_t /etc/selinux/targeted/contexts/files/file_contexts.homedirs
/home/[^/]+/.+  user_u:object_r:user_home_t:s0

通过将条目添加为本地上下文,它将从此文件获取:/etc/selinux/targeted/contexts/files/file_contexts.local,它出现在此刻匹配的文件之后.

因此,为了解决这个问题(这基本上是一个黑客攻击),您可以将条目添加为本地覆盖.

或者,我尝试将其添加为HOME_DIR覆盖(就像我最初建议的那样,但使​​用audio_home_t来测试主体)执行以下操作:

HOME_DIR/(tcr)?/\.google_authenticator          --      gen_context(system_u:object_r:audio_home_t)

这对我有用,因为它添加了后面文件的条目和’last regex won’,当我这样做时.

它实际上在文件中将正则表达式更改为:

grep tcr /etc/selinux/targeted/contexts/files/*
/etc/selinux/targeted/contexts/files/file_contexts.homedirs:/home/[^/]+/(tcr)?/\.google_authenticator   --  user_u:object_r:audio_home_t:s0

我建议首先尝试HOME_DIR选项(这是你应该实现它的政策的实际方式),或者使用本地覆盖.

原文链接:/linux/396957.html

猜你在找的Linux相关文章