在使用 CentOS8 之前,我确实在 Linux 上安装了一些 aspnet core 应用程序。这次我使用了 CentOS8-Stream。我不知道这是否会导致问题。
事实:
我无法让 Apache 使用证书。一切都和我以前做的一样,但它却不起作用。最后,我在互联网上找到了一些以前
ls -lrtZ /etc/pki/tls/certs
显示的模糊链接security context
(我甚至不知道它的存在)。所以我只是对cp
文件进行证书验证,Apache 现在就可以正常工作了。但是我的 aspnet 应用程序失败了
attempt to write a readonly database
。我尝试了这个cp
技巧,但没有帮助。也没有出现应用程序日志
数据库文件:
-rw-rw-rw-. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0
我不明白这怎么security context
能覆盖常规的类似 chmod 的权限??如何修复它?我的意思是,如何才能获得更明确的权限,例如 rwrwrw ?
这是 SELinux 的新功能吗feature
?我可以完全关闭它吗?
注意:1 和 2 无关 - 我只是认为它们具有相同的根本原因,但它们之间没有任何关系。如果我不使用 Apache 直接访问 aspnet 应用程序 - 它会出现相同的错误
答案1
SELinux 是一个基于角色的访问控制系统,可以精确控制进程的权限。例如,当 Web 服务器无法读取(/etc/shadow
甚至无法以 root 用户身份读取)或启动 Web shell 时,它会更安全。安全上下文是该系统的基础,自系统诞生之日起就一直存在。
SELinux 文件上下文与 UNIX 权限或扩展 ACL 是分开的。所有权限都必须允许;是的,当基本文件权限指示允许时,selinux 可以拒绝。
阅读RHEL 8 使用 SELinux 手册和CentOS wiki 页面上的 SELinux。使用那里的故障排除工具,特别是 sealert -a /var/log/audit/audit.log
检查应用程序出现问题时出现的任何拒绝情况。检查是否存在任何布尔值来切换您想要的行为。
答案2
感谢@John Mahowald,让我找到了看待这个问题的正确角度。
原因的根本在于我之前的所有虚拟机都使用 SELinuxpermissive
模式,而新的虚拟机(GCP)正在enforcing
模式下运行。
因此,如果您偶然发现无法解释的奇怪效果 - 请参阅 John 的链接。但请先使用sestatus
命令查看您的 SELinux 设置为哪种模式。
PS 我决定让它保持宽松,因为强制执行根本无法维持。我认为整个 SELinux 都是无用的。必须更换