所以我有一个在 Centos 6.5 上运行的 Web 应用程序。
该应用程序是 Ruby/Rails 应用程序,但图像由 Apache HTTPD 提供。
应用程序文件夹位于用户主文件夹中,但我已授予 HTTPD 正确的权限,并在 SELinux 中启用了 httpd_enable_home_dirs。所有静态图像都工作正常。
我看到的问题是,当最终用户上传图像(个人资料图标)时,该文件的 SELinux 上下文被设置为 unconfined_u:object_r:user_tmp_t:s0 而不是 unconfined_u:object_r:usr_t:s0。
如果我在文件上手动运行 Restorcon,上下文就会得到修复,并且图像可以正常工作。知道如何确保使用正确的上下文创建文件吗?我研究过使用 Restorcond,但看起来它不会递归检查子目录,并且子目录结构不可预测。
感谢任何帮助。
最佳答案
很可能您的应用程序正在将对象从/tmp 或/var/tmp 移动到目标位置。
默认情况下,当使用“mv”移动对象时,其安全元数据也会移动。因此,对象最终到达目的地时带有旧的且不准确的安全元数据。在目标对象上运行“restorecon”会将上下文重置为策略认为应该的内容。
有多种方法可以解决这个问题。要么允许您的 web 应用程序读取上下文不准确的对象,要么告诉您的 web 应用程序使用带 -Z 选项的“mv”,或者改用“cp”。 (“cp”命令复制对象,因此目标对象最终会获得适当的安全元数据,通常大部分是从目标父目录继承的。
关于ruby-on-rails - 通过 Rails 应用程序上传的文件的 SELinux 类型设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139660/