【问题标题】:SELinux type getting set incorrectly for files uploaded VIA a Rails application通过 Rails 应用程序上传的文件的 SELinux 类型设置不正确
【发布时间】:2015-01-24 05:17:54
【问题描述】:

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

如果我在文件上手动运行 restorecon,上下文会得到修复,并且图像可以正常工作。知道如何确保使用正确的上下文创建文件吗?我研究过使用restorcond,但它看起来不会递归检查子目录,并且子目录结构不可预测。

感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby apache centos selinux


    【解决方案1】:

    您的应用程序很可能正在将对象从 /tmp 或 /var/tmp 移动到目标位置。

    默认情况下,当使用“mv”移动对象时,其安全元数据也是如此。因此,对象最终到达目的地时带有旧的和不准确的安全元数据。在目标对象上运行“restorecon”会将上下文重置为策略认为的应有状态。

    有多种方法可以解决这个问题。要么允许您的 webapp 读取具有不准确上下文的对象,要么告诉您的 webapp 使用带有 -Z 选项的 'mv' 或使用 'cp' 代替。 (“cp”命令复制对象,因此目标对象最终会得到适当的安全元数据,通常主要从目标父目录继承。

    【讨论】:

    • 迟到总比不到好。这正是问题所在。
    【解决方案2】:

    显然 SELinux 抑制了一些错误消息...

    为了调试,我必须运行

    semodule -DB

    这将使用禁用“不记录”标志重建/重新启动本地策略。禁用“不记录”后,错误消息会显示在审核日志中,您可以使用常规添加新策略:

    sealert -a /var/log/audit.log

    然后找到有问题的错误的 audit2allow 命令。

    您可以在运行后将日志恢复正常

    semodule -B

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多