我想以 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 中运行进程的整个目的。
希望能帮助到你。