Jvm Java堆转储权限
Linux机器(很可能还有Unix机器)中生成的java堆转储限制了访问。堆只能由进程的所有者读取(ACL掩码设置为600)。我知道这是出于安全原因。但是,我找不到任何引用或解释该行为的文档。有人能给我指一下文件(如果有的话)吗?还有,是否有任何方法可以覆盖此行为 堆转储由JVM进程编写,该进程作为特定用户运行。就像任何Linux进程创建的任何文件一样,它将归该用户所有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
如果您想要实际的文档。查看
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,现在问这个问题已经太迟了,但是你是否成功地覆盖了这个行为??