【问题标题】:how can lock a windows file or a folder using java , like locker apps?如何使用 java 锁定 Windows 文件或文件夹,例如储物柜应用程序?
【发布时间】:2018-09-08 13:42:10
【问题描述】:

Locker Apps 是一个文件夹锁定应用程序,我如何使用 Java 在 Windows 上锁定文件或文件夹?

这是我尝试过的:

File file = new File(file path);
file.setExecutable(false); 
file.setWritable(false); 
file.setReadable(false);

但只有 file.setwritable(false); 有效 - 我无法重写文件。其他方法对文件没有任何作用。

【问题讨论】:

标签: java file-permissions


【解决方案1】:

这些方法只是简单地设置文件的文件系统访问权限。为了理解它们,你需要了解操作系统/文件系统的访问控制规则。

例如在Linux上file.setWriteable(false)相当于运行chmod u-w file来清除“所有者写入”访问位:

注意:

  1. chmod 只能在您是文件所有者或以root 运行时更改文件的任何 权限。

  2. 所有者写权限意味着所有者(或root)可以执行文件,也可以不执行。如果您都不是,那么该权限不会影响您。

因此,setWriteable 可能无法“工作”至少有两个可能的原因。

  • 您没有以文件所有者或root 的身份执行您的Java 程序。在这种情况下,setWriteable 将返回 false。但请注意,您没有检查结果!

  • 您没有尝试以文件所有者的身份写入文件。在这种情况下,您刚刚删除的访问权限(在 Java 中)不会影响您


解决方案:

java.nio.file.Files 类中有一个更新/更好的用于在 Java 中设置文件权限的 API:

public static Path setPosixFilePermissions(
         Path path,
         Set<PosixFilePermission> perms)
     throws IOException

这允许您在一次调用中设置/清除所有可用的 POSIX 文件权限,如果由于任何原因不能,它会抛出异常。

许多文件系统还支持更复杂的 ACL 机制 ....

但是

这些都不等同于 File Locker 应用程序提供的功能。为什么?因为任何通过文件权限或 ACL 阻止文件访问的尝试都可以被具有 root 访问权限的人轻易地逆转。前提是您知道它在技术层面上做什么。

Windows“文件夹锁定”应用显然可以加密文件或隐藏文件。通过设置“dos:hidden”属性,可以在 Java 7 及更高版本中将文件本地标记为隐藏;见https://stackoverflow.com/a/42816082/139985。它可能还使用权限和 ACL 来限制访问,这也可以在 Java 上执行。它也可能在做其他事情。文档说(无济于事!):

一旦文件被锁定,它就会受到各种可能的保护,并且只能通过文件夹锁定安全应用程序访问。

这听起来像是营销而不是事实,而且几乎可以肯定是不真实的。然而,要弄清楚应用程序实际在做什么,我需要获得一台 Windows 机器,下载并安装软件,然后通过尝试对其进行逆向工程来违反许可。

但请注意,上述“隐藏”方法是特定于 Windows 的。在 Linux / Mac OS 上,您可以通过将文件名的第一个字符设为点(“.”)字符来“隐藏”某些命令中的文件。

【讨论】:

  • 那么文件锁应用程序使用什么来锁定文件?
  • 他们通常使用加密。您说的是哪个特定的文件柜应用程序?
  • 文件夹储物柜,它有两个选项 - 加密或锁定文件 - 如果您使用文件锁定,则无法使用 Windows 文件资源管理器访问它。 - 就像它不存在一样 - 但它是如果您在您的机器上使用两个操作系统,则可以在使用任何其他操作系统时访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2013-02-20
  • 2013-08-13
  • 2010-09-20
  • 2018-07-18
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多