在检查samba装载的权限时,Java是否完全兼容?

在检查samba装载的权限时,Java是否完全兼容?,java,linux,samba,Java,Linux,Samba,我正在使用 Files.isWritable(file) 在我的Java应用程序中,在修改文件之前检查我是否有修改文件的权限 这通常可以正常工作,但我有一位客户抱怨说,尽管他对自己的文件给予了完全的许可,但仍然无法正常工作。客户的设置包括一个远程linux驱动器,该驱动器用Samba安装到他的Windows机器上,我的软件在Windows机器上运行 事实证明,他为特定用户授予了文件夹和文件的完全权限,但没有授予用户组或linux上的任何其他人 如果他将linux上的权限从700更改为777,那

我正在使用

Files.isWritable(file)
在我的Java应用程序中,在修改文件之前检查我是否有修改文件的权限

这通常可以正常工作,但我有一位客户抱怨说,尽管他对自己的文件给予了完全的许可,但仍然无法正常工作。客户的设置包括一个远程linux驱动器,该驱动器用Samba安装到他的Windows机器上,我的软件在Windows机器上运行

事实证明,他为特定用户授予了文件夹和文件的完全权限,但没有授予用户组或linux上的任何其他人

如果他将linux上的权限从700更改为777,那么它就起作用了,但我不确定他是否必须这样做?

检查samba装载上的权限时,Java是否存在问题取决于此

UNIX和Windows上的访问控制机制传统上是不同的。以前,与samba3一样,这些权限之间有一个相当粗糙的映射,在简单的情况下可以工作,但在更困难的情况下会出现问题。你可以找到许多关于这些特殊情况的教程、论坛帖子和邮件列表

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

  • 它就像一个接口:您对不同的系统拥有相同的权限“想法”,并且它们实现了自己的文件系统相关细节,这意味着您(或Java)只需要处理高级内容
  • 它比旧的基本UNIX权限灵活得多,包括创建新文件或创建新子目录、文件和/或目录的详细继承,或拒绝和允许规则的组合
  • 尽管名称不同,但它不仅适用于NFS版本4,而且适用于当前的Windows权限、ZFS上的Solaris 10/illumos CIFS实现和Linux系统上的samba4(我相信)
您通常使用以下简短示例中所述的:

 // 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);
//查找“joe”
UserPrincipal joe=file.getFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName(“乔”);
//查看
AclFileAttributeView视图=Files.getFileAttributeView(文件,AclFileAttributeView.class);
//创建ACE以授予“joe”读取权限
acentry entry=acentry.newBuilder()
.setType(acentryType.ALLOW)
.校长(乔)
.setPermissions(acentrypermission.READ_数据、acentrypermission.READ_属性)
.build();
//读取ACL,插入ACE,重新写入ACL

列表-虽然示例来自
chmod
,但权限本身在Java中是相同的(但也存在较短的JavaDoc,)。

Samba服务器是如何配置为映射权限的?Samba服务器如何将Windows用户映射到Linux系统上的用户以进行访问控制?Windows和Linux之间存在着不寻常的阻抗不匹配,Samba是弥合这一差距的最佳尝试。它不是完美的,任何解决方案都是折衷的。我真的不知道Samba,但他们在linux上有用户alex,而且他们似乎在使用用户alex从Windows连接到它,这还不够吗?如果没有访问整个配置,就不可能知道。你应该和负责管理Samba服务器的人谈谈。我是,但他只是一个有NAS的普通人这就是为什么我请求帮助我有上面的屏幕截图,但我不知道还有什么可以问他,如果问题出在他对Samba的配置或Java支持上,这就是为什么我在So上发帖子,如果是关于配置的话,这是离题的。它属于你。