Java 设置文件夹所有者以便只有程序可以访问它
Java setting folder owner so only the program have access to it
我有一个加密程序,我正在寻找一种方法,以便只有加密程序才能访问它们的密钥文件夹。但是将它设置为所有者或用户中的任何人都不是一个好主意。我在想也许像 Steam 那样处理它的文件夹。它甚至限制对计算机 owner/admin 的访问,只有 Steam 应用程序可以 communicate/edit/access 文件夹。我想知道如何在 Java.
中做到这一点
我现在的代码是这样的
Path file = Paths.get("F:\keys\pic.datakey");
UserPrincipal owner = file.GetFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName("username");
Files.setOwner(file, owner);
其中 keys
是文件夹名称,pic.datakey
是我试图阻止除程序以外的任何人访问的密钥。
How to set the folder owner to the encryption program's?
加密程序不是主体。它不能拥有东西。你需要的是运行程序作为一些特殊的主体1.
问题:
你应该使用什么主体?对此不会有独立于平台的答案。事实上,没有明显的特定于平台的答案,至少对于 Linux.
如何确保加密程序运行s为指定主体。这在 Java 中无法解决。 (长话短说......但是像 UNIX setuid 这样的机制将需要一个非 Java(非 shell)启动器来为 Java 程序安全地实现它们。)
但是一旦完成这些操作,就没有必要更改文件的所有者(根据您的代码)。所有者将默认为程序当前 运行.
所依据的主体
但这才是真正的问题。您认为通过对加密文件的用户隐藏加密密钥会达到什么目的?
如果我们假设用户具有完整的 "root" 访问权限(或同等权限),那么他们可以直接(即以根用户身份)或通过一些额外的努力访问存储在系统本地的任何文件。当然是在典型的操作系统上。
另一方面,如果用户没有 "root"(或同等)访问权限,您可以通过设置文件的所有者/权限来阻止他/她查看文件。添加加密并没有带来更多好处。
Yes it's a security measure.
针对什么安全?拥有机器的用户?即使假设它在技术上是可行的,这样做是否合理?
(这些都是反问。我提出这些问题是为了让你思考,不是因为我同意或不同意你在做什么。也不是因为我想辩论这个问题。)
1 - 假设程序 运行s 作为用户。首先,用户不能将其文件的所有权转让给另一个用户。这将为 "cheat" 文件使用情况统计提供一种简单的方法。您的加密程序 运行ning 作为用户也不能这样做。 (OS无法确定操作的意图。)其次,假设普通用户可以更改文件的所有者,那么在所有权变更后,用户将无法阅读它。而且,加密程序也不行。
我有一个加密程序,我正在寻找一种方法,以便只有加密程序才能访问它们的密钥文件夹。但是将它设置为所有者或用户中的任何人都不是一个好主意。我在想也许像 Steam 那样处理它的文件夹。它甚至限制对计算机 owner/admin 的访问,只有 Steam 应用程序可以 communicate/edit/access 文件夹。我想知道如何在 Java.
中做到这一点我现在的代码是这样的
Path file = Paths.get("F:\keys\pic.datakey");
UserPrincipal owner = file.GetFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName("username");
Files.setOwner(file, owner);
其中 keys
是文件夹名称,pic.datakey
是我试图阻止除程序以外的任何人访问的密钥。
How to set the folder owner to the encryption program's?
加密程序不是主体。它不能拥有东西。你需要的是运行程序作为一些特殊的主体1.
问题:
你应该使用什么主体?对此不会有独立于平台的答案。事实上,没有明显的特定于平台的答案,至少对于 Linux.
如何确保加密程序运行s为指定主体。这在 Java 中无法解决。 (长话短说......但是像 UNIX setuid 这样的机制将需要一个非 Java(非 shell)启动器来为 Java 程序安全地实现它们。)
但是一旦完成这些操作,就没有必要更改文件的所有者(根据您的代码)。所有者将默认为程序当前 运行.
所依据的主体但这才是真正的问题。您认为通过对加密文件的用户隐藏加密密钥会达到什么目的?
如果我们假设用户具有完整的 "root" 访问权限(或同等权限),那么他们可以直接(即以根用户身份)或通过一些额外的努力访问存储在系统本地的任何文件。当然是在典型的操作系统上。
另一方面,如果用户没有 "root"(或同等)访问权限,您可以通过设置文件的所有者/权限来阻止他/她查看文件。添加加密并没有带来更多好处。
Yes it's a security measure.
针对什么安全?拥有机器的用户?即使假设它在技术上是可行的,这样做是否合理?
(这些都是反问。我提出这些问题是为了让你思考,不是因为我同意或不同意你在做什么。也不是因为我想辩论这个问题。)
1 - 假设程序 运行s 作为用户。首先,用户不能将其文件的所有权转让给另一个用户。这将为 "cheat" 文件使用情况统计提供一种简单的方法。您的加密程序 运行ning 作为用户也不能这样做。 (OS无法确定操作的意图。)其次,假设普通用户可以更改文件的所有者,那么在所有权变更后,用户将无法阅读它。而且,加密程序也不行。