记一次 Garnet 的安装部署问题排查

💡 原文中文,约3100字,阅读约需8分钟。
📝

内容提要

本文介绍了在Linux系统中部署.NET独立应用程序时遇到的问题,并以安装部署替代Redis的Garnet为例进行排查。通过检查文件权限、依赖库和SELinux配置等方面,解决了应用程序无法正常运行的问题。文章总结了在Linux系统中部署应用程序时,正确设置文件的SELinux上下文可以确保应用程序正常运行。

🔎

延伸解读

SELinux 上下文:部署 .NET 独立应用时的常见陷阱

在 Linux 上部署 .NET 独立应用时,即使文件权限和依赖库都正常,SELinux 也可能阻止执行。本文中 Garnet 的二进制文件默认上下文为 default_t,而 SELinux 策略通常只允许 bin_t 类型的文件被执行,导致 systemd 启动时报 203/EXEC 错误。这提醒我们,在启用 SELinux 的系统上,部署自定义路径下的可执行文件时,需检查并调整其安全上下文。

排查思路:从权限到 SELinux 的递进检查

作者按照从简到繁的顺序排查:先确认文件存在且具有执行权限,再用 ldd 检查依赖库是否齐全,最后检查 SELinux 配置。这种递进方式能快速排除常见问题,将焦点转向安全策略。对于 systemd 服务启动失败且返回 203/EXEC 的情况,在权限和依赖无误后,应优先考虑 SELinux 上下文是否正确。

systemd 服务配置与 SELinux 的配合

文中 systemd 单元文件配置了 WorkingDirectory 和 User=root,但即使如此,SELinux 仍会基于文件上下文进行限制。修改上下文后,需执行 daemon-reload 并重启服务才能生效。这说明在 systemd 管理下,服务能否启动不仅取决于单元文件,还受 SELinux 策略影响,调整后必须重载配置。

❓

Q&A

Garnet是什么?

Garnet是微软研究院的新开源项目,提供远程缓存存储,性能优于其他开源缓存存储。

在Linux系统中部署Garnet时遇到了什么问题?

在Linux系统中部署Garnet时,应用程序无法通过systemd服务正常运行,报错为203/EXEC。

如何检查Garnet应用程序的文件权限和依赖库?

可以使用ls -l命令检查文件权限,使用ldd命令检查依赖库是否存在。

SELinux配置如何影响Garnet的运行?

SELinux的安全策略默认不允许执行非bin_t类型的文件,导致Garnet无法正常运行。

如何解决Garnet的203/EXEC错误?

通过将Garnet文件的SELinux上下文更改为bin_t,解决了203/EXEC错误。

总结一下在Linux中部署应用程序时需要注意什么?

在Linux中部署应用程序时,需正确设置文件的SELinux上下文,以确保应用程序正常运行。

➡️

继续阅读