Java设置文件夹所有者,因此只有程序才能访问它

时间:2017-07-03 09:38:58

标签: java encryption directory file-permissions

我有一个加密程序,我正在寻找一种方法,只有加密程序才能访问它们的密钥文件夹。但是将其设置为所有者或用户中的任何人都不是一个好主意。我想也许像Steam这样的文件夹。它甚至限制访问计算机的所有者/管理员,只有Steam应用程序可以通信/编辑/访问该文件夹。我想知道如何用Java做到这一点。

我现在拥有的代码就是这个。

Path file = Paths.get("F:\\keys\\pic.datakey");
UserPrincipal owner = file.GetFileSystem().getUserPrincipalLookupService()
        .lookupPrincipalByName("username");
Files.setOwner(file, owner);

keys是文件夹名称,pic.datakey是我试图阻止除程序之外的任何人访问的密钥。

  

如何将文件夹所有者设置为加密程序?

1 个答案:

答案 0 :(得分:2)

加密程序不是委托人。它不能拥有自己的东西。你需要的是将程序作为一些特殊的主体 1 运行。

问题:

  1. 您应该使用哪个校长?这不是一个独立于平台的答案。实际上,至少在Linux上,没有明显的特定于平台的答案。

  2. 如何确保加密程序作为指定的主体运行。这在Java中是无法解决的。 (很长一段时间......但是像UNIX setuid这样的机制需要一个非Java(非shell)启动程序来安全地为Java程序实现它们。)

  3. 但是一旦完成了这些操作,就没有必要更改文件的所有者(根据您的代码)。所有者将默认使用当前正在运行程序的主体。

    但这是真正的问题。您认为通过从加密文件的用户隐藏加密密钥可以实现什么?

    如果我们假设用户有完整的" root"访问(或等效)然后他们可以直接(即作为root)或通过一些额外的努力访问系统本地存储的任何文件。当然是在典型的操作系统上。

    另一方面,如果用户没有" root" (或等效)访问,您可以通过设置文件的所有者/权限来阻止他/她查看文件。添加加密并没有实现更多目标。

      

    是的,这是一项安全措施。

    安全对抗什么?拥有该机器的用户?即使假设技术上可行,这样做是否合理?

    (这些都是修辞性的问题。我提出这些问题让你思考,不是因为我同意或不同意你的所作所为。并不是因为我想辩论这个问题。)

    1 - 假设程序以用户身份运行。首先,用户无法将其文件的所有权转让给其他用户。这将提供一种简单的方法来欺骗"文件使用会计。以用户身份运行的加密程序也无法执行此操作。 (操作系统无法确定操作的意图。)其次,假设普通用户可以更改文件的所有者,那么在更改所有权后,用户将不会能够阅读它。此外,加密程序也都没有。