gpt4 book ai didi

JavaNIO : check File lock created by a root-user from a process running under a normal user?

转载 作者:搜寻专家 更新时间:2023-11-01 02:30:32 28 4
gpt4 key购买 nike

我有两个要同步的进程。

进程 A 以 root 身份运行并在特定文件上创建可重入锁。进程 B 在“普通”用户下运行,应该等待进程 A 释放锁。

我尝试了很多方法,但由于文件权限错误而无法正常工作。这是代码:(删除了 in-VM-synchronization-stuff):

锁定:

FileChannel channel = new RandomAccessFile(pFile, "rw").getChannel();
lock = channel.tryLock();

有锁:

RandomAccessFile file = new RandomAccessFile(pFile, "rw");
FileChannel channel = file.getChannel();
FileLock lock = channel.tryLock();
if (lock == null) {
return true;
}
lock.release();

我遇到的问题是锁被创建为:

-rw-r--r--. 1 root root 0 May  7 21:42 lockfile.lock

如果我尝试检查锁(通过以普通用户身份运行的进程 B),我会得到一个

java.io.FileNotFoundException: _lockfile_ (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212)

我试图将目录 umask 到所有 g=rwx,o=rwx 但这似乎被忽略了。我尝试先创建文件 setWritable(true, false) 但这似乎已重置。我没有得到任何工作方法。我尝试在 hasLock 中使用模式“r”而不是“rw”,但这会导致 ChannelNotWritableException。

所以主要问题是:如何影响创建的锁定文件的权限?

有人有什么建议吗?

问候迈克尔

最佳答案

您遇到了根进程的 umask,它屏蔽了您在创建文件时提供的“rw”以拒绝对 group 的写访问其他。除了更改 root 的 umask 之外,您无能为力,出于安全原因,这是一个非常糟糕的想法。

您应该考虑让锁定文件永久存在,或者像 Peter 所建议的那样,使用一个已经包含在您的应用程序中的文件作为锁定文件。

关于JavaNIO : check File lock created by a root-user from a process running under a normal user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488391/

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