ruby-on-rails - 通过 Rails 应用程序上传的文件的 SELinux 类型设置不正确

标签 ruby-on-rails ruby apache centos selinux

所以我有一个在 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/

相关文章:

ruby - 这种排序算法的名称是什么?

apache - trac 通知不发送电子邮件

ruby-on-rails - 如何测试模块在被 Controller 类包含时是否向 before_filter 添加方法

ruby-on-rails - 使用 ruby​​ 将字符串解析为字符

ruby-on-rails - Rails 唯一性 => 真正的编码问题

ruby-on-rails - 如何在 Rails 中将数据从 View 传递到 Controller

ruby - 推荐的 ruby​​ View 框架

php - 使用正则表达式阻止 .htaccess 中的 URL

php - 系统时间不同于 apache 时间戳——?

ruby-on-rails - 如何通过 Heroku 在不同的数据库服务器上运行迁移?