Jvm Java堆转储权限

Jvm Java堆转储权限,jvm,heap,file-permissions,heap-dump,jmap,Jvm,Heap,File Permissions,Heap Dump,Jmap,Linux机器(很可能还有Unix机器)中生成的java堆转储限制了访问。堆只能由进程的所有者读取(ACL掩码设置为600)。我知道这是出于安全原因。但是,我找不到任何引用或解释该行为的文档。有人能给我指一下文件(如果有的话)吗?还有,是否有任何方法可以覆盖此行为 堆转储由JVM进程编写,该进程作为特定用户运行。就像任何Linux进程创建的任何文件一样,它将归该用户所有 如果您想要实际的文档。查看O_create下的描述如果您对深度JVM内部结构感兴趣,可以查看OpenJDK的源代码 以下是He

Linux机器(很可能还有Unix机器)中生成的java堆转储限制了访问。堆只能由进程的所有者读取(ACL掩码设置为600)。我知道这是出于安全原因。但是,我找不到任何引用或解释该行为的文档。有人能给我指一下文件(如果有的话)吗?还有,是否有任何方法可以覆盖此行为

堆转储由JVM进程编写,该进程作为特定用户运行。就像任何Linux进程创建的任何文件一样,它将归该用户所有


如果您想要实际的文档。查看
O_create

下的描述如果您对深度JVM内部结构感兴趣,可以查看OpenJDK的源代码

以下是HeapDumper服务的链接:

如果深入研究,您将看到JVM正在使用
S|IREAD | S|IWRITE

 4373 // create binary file, rewriting existing file if required
 4374 int os::create_binary_file(const char* path, bool rewrite_existing) {
 4375   int oflags = O_WRONLY | O_CREAT;
 4376   if (!rewrite_existing) {
 4377     oflags |= O_EXCL;
 4378   }
 4379   return ::open64(path, oflags, S_IREAD | S_IWRITE);
 4380 }

这不是一个完整的答案,但线程转储可能包含真正的机密信息,包括您的数据库密码。所以你最好保证它们的安全。我不相信这和同一个用户创建任何其他文件一样。在我的环境中,我将用户的umask设置为022。当我使用touch创建文件时,文件权限为644(rw-r-r-)。事实上,即使是java进程生成的日志文件也具有umask指定的权限。但是,堆转储始终为600(rw---)。我认为JVM显然是出于安全考虑(bcos堆可以获取敏感数据)或使用导致此问题的系统调用来设置permssns的。我正在寻找解释它的文档以及覆盖它的任何方法(h-dump后的chmod不是optn)@AbhilashKoneri,现在问这个问题已经太迟了,但是你是否成功地覆盖了这个行为??