自定义策略

自定义策略

我想以 root 身份运行 logstash,以允许它读取所有日志(授予它访问每个日志的权限非常麻烦)。但是,我不希望它在我的服务器上肆意运行,我考虑在 SELinux 下限制它。
我看到的选项是:

  • 为 logstash 创建全新标签。这也意味着为 logstash 配置文件、logstash 可执行文件和库等创建标签。
  • 使用为另一个进程设计的标签运行 logstash。我密切关注它,clogd_t因为它log的名称中有,而且我找不到任何可疑的写入权限sudo sesearch --allow -s clogd_t | grep clogd_t | less -p write
  • 放弃并将其作为不受约束的根进程运行

这是正常的事吗?

以防万一,我使用的是 CentOS 6.7

答案1

我宁愿制定自定义政策,因为它更清晰,并且能让你控制正在发生的事情。

自定义策略

据我所知,您将运行一个基于 Java 的守护进程,因此将其作为运行可能是明智的system_u:system_r:logstash_t。然后,您需要授予 logstash_t 域对所有日志文件的访问权限(只读?),最后授予 logstash 运行可能需要的任何其他权限。

使用 refpolicy 接口,我们可以得到类似这样的结果:

policy_module(logstash, 1.0)

# define the entry point and the domain
type logstash_exec_t
init_daemon_domain(logstash_t, logstash_exec_t)

然后 logstash 守护进程需要能够读取日志文件:

logging_search_all_logs(logstash_t)
logging_getattr_all_logs(logstash_t)
logging_read_all_logs(logstash_t)

这应该可以完成大部分工作,然后您需要添加其余部分。

重用政策

对于第二点,我不确定为什么您没有获得 sesearch 报告的任何写权限,但如果您查看来源:

# clogd.te
storage_raw_read_fixed_disk(clogd_t)
storage_raw_write_fixed_disk(clogd_t)

# storage.te 
########################################
## <summary>
##      Allow the caller to directly write to a fixed disk.
##      This is extremely dangerous as it can bypass the
##      SELinux protections for filesystem objects, and
##      should only be used by trusted domains.
## </summary>
## <param name="domain">
##      <summary>
##      Domain allowed access.
##      </summary>
## </param>
#
interface(`storage_raw_write_fixed_disk',`
# and the rest of the stuff here...

这实际上并不是人们想要的日志监控工具。您可能会发现适合第二种解决方案的东西,但一定要确保您没有获得额外的不需要的权限,因为这违背了在 selinux 中运行进程的整个目的。

希望能帮助到你。

相关内容