gpt4 book ai didi

java - 检查 samba 安装权限时 Java 是否完全兼容?

转载 作者:太空狗 更新时间:2023-10-29 12:43:16 24 4
gpt4 key购买 nike

我正在使用

Files.isWritable(file)

在我的 Java 应用程序中检查我是否有权在修改文件之前修改它。

这通常可以正常工作,但我有一位客户提示说,尽管他已经对他的文件授予了完全权限,但它仍然无法正常工作。客户设置包括一个通过 Samba 安装到他的 Windows 机器上的远程 Linux 驱动器,我的软件在 Windows 机器上运行。

事实证明,他已经为特定用户授予了对文件夹和文件的完全权限,而不是用户组或 linux 上的任何其他人。

如果他将 Linux 上的权限从 700 更改为 777 那么它就可以工作,但我不确定他是否应该这样做? windows permissions linux permissions

检查samba挂载权限时Java是否有问题

最佳答案

视情况而定。

UNIX 和 Windows 上的访问控制机制传统上是不同的。以前,与 samba3 一样,您在这些权限之间有一个相当粗略的映射,这在较简单的情况下有效,但在较困难的情况下会出现问题。您可以找到大量处理这些特殊情况的教程、论坛帖子和邮件列表。

现在,情况变得更好了,因为有 NFSv4 风格的访问控制列表。优点有几个:

  • 它就像一个接口(interface):你对不同的系统有相同的权限“想法”,它们实现了它们自己的文件系统相关细节,这意味着你(或 Java)只需要处理高级的东西。
  • 它比旧的基本 UNIX 权限灵活得多,包含诸如创建新文件创建新子目录、文件和/或目录的详细继承,或组合拒绝和允许规则。
  • 尽管名称如此,但它不仅适用于 NFS 版本 4,而且适用于当前的 Windows 权限、ZFS 上的 Solaris 10/illumos CIFS 实现和 Linux 系统上的 samba4(我相信)。

您通常使用 ACLFileAttributeView如简短示例中所述:

 // lookup "joe"
UserPrincipal joe = file.getFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName("joe");

// get view
AclFileAttributeView view = Files.getFileAttributeView(file, AclFileAttributeView.class);

// create ACE to give "joe" read access
AclEntry entry = AclEntry.newBuilder()
.setType(AclEntryType.ALLOW)
.setPrincipal(joe)
.setPermissions(AclEntryPermission.READ_DATA, AclEntryPermission.READ_ATTRIBUTES)
.build();

// read ACL, insert ACE, re-write ACL
List<AclEntry> acl = view.getAcl();
acl.add(0, entry); // insert before any DENY entries
view.setAcl(acl);

在您的情况下,查询第二步中的 View 以获得您想要检查的权限就足够了。有关详细概述,我喜欢使用此 documentation from Oracle - 虽然示例来自 chmod,但权限本身在 Java 中是相同的(但也存在更短的 JavaDoc,AclEntryPermission Enums)。

关于java - 检查 samba 安装权限时 Java 是否完全兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com