【发布时间】:2020-07-15 13:52:20
【问题描述】:
我有一个 java jar 文件,它使用 File.setLastModified() 通过引用 /mnt/nxx/file.name 来设置文件的特定时间戳。当文件由与运行 java 进程的登录用户相同的 UID 拥有时,它可以正常工作。但如果登录用户是任何其他 UID,它就会失败。
文件托管在外部 USB 驱动器上,该驱动器格式化为在引导时通过 /etc/fstab 安装在 Raspberry Pi 上的 Ext4 文件系统,使用:
/dev/sdb1 /mnt/nxx ext4 defaults 0 2
同一网络上的 Ubuntu 主机,在引导时通过 /etc/fstab 挂载同一磁盘,使用:
192.168.x.x:/mnt/nxx /mnt/nxx nfs rw 0 1
只要登录的用户与 Pi 上的 UID 相同,也可以成功设置时间戳。
但是,通过 Samba 连接到同一个磁盘(映射为 N:\ 到 \RASPI\root\mnt)并运行相同的 java 代码的 Windows-10 主机可以成功地为任何文件设置时间戳,而不管Pi 声明的文件所有者。
有问题的文件有 777 权限,正如预期的那样,我家庭网络中任何主机上的任何用户都可以成功修改该文件。唯一的问题是,当 Linux 主机上用户的 UID 与文件所有者不匹配时,对 setLastModified() 的 java 调用会失败——即使用户 java 进程正在使用与文件相同的 GID 运行。
我的目标是能够挂载磁盘并通过任何方法在我的家庭网络中的所有主机之间共享它,以便我家庭网络上的 Windows 和 Linux 主机都可以使用 java 代码成功地操纵时间-邮票。
为什么 Windows-10 可以不考虑用户而成功地操作时间戳,而 Linux 却不能?有没有办法让我在各种 fstab 挂载指令、smb.conf 或其他地方添加/配置选项来配置磁盘,以便 Linux 的行为与 Windows 相同?
顺便说一句:使用 NTFS 文件系统格式化的外部安装 HDD 也存在同样的问题。我没有尝试使用 NTFS 驱动器进行用户映射。
任何帮助将不胜感激。
顺时针
【问题讨论】:
标签: java linux permissions file-ownership