什么时候调用 SELinux.restorecon()?

When to call SELinux.restorecon()?

Android 开源代码包含这样的代码。任何人都可以解释为什么以及在什么情况下有必要做 SELinux.restorecon(File)?

    // If Encrypted file systems is enabled or disabled, this call will return the
    // correct directory.
    mBaseStateDir = new File(Environment.getSecureDataDirectory(), "backup");
    mBaseStateDir.mkdirs();
    if (!SELinux.restorecon(mBaseStateDir)) {
        Slog.e(TAG, "SELinux restorecon failed on " + mBaseStateDir);
    }

我们可以经常这样做吗?

SELinux restorecon 用于恢复某些 files/dir.

上的默认安全上下文

事情(不明显)是我们还用它来应用 上下文更改,and/or 以确保文件上下文符合您的预期。

通常,我们 define/override 使用 semanage-fcontext 默认安全上下文,然后 运行 restorecon 根据这些新默认设置重新标记文件。

这里的代码试图重新标记 mBaseStateDir 但没有成功。可能是:

  • 没有政策支持与该目录关联的默认上下文(给定它的路径)
  • mBaseStateDir 标签错误(上下文类型不适用)
  • user/process 运行注意该代码没有足够的权限来重新标记目录(即使它刚刚创建它)。