如何使用java来锁定Windows文件或文件夹,比如更衣室应用程序?

时间:2018-03-29 14:32:14

标签: java file-permissions

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

以下是我的尝试:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

注意:

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

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

  3. 因此,至少有两个可能的原因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机制....

    HOWEVER

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

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

      

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

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

    但请注意以上方法&#34;隐藏&#34;是特定于Windows的。在Linux / Mac OS上,你可以隐藏&#34;通过使文件名的第一个字符成为点(&#34;。&#34;)字符,来自某些命令的文件。