在Linux機器(以及最可能的Unix機器)中生成的java堆轉儲限制了訪問權限。該堆只能由進程的所有者讀取(ACL掩碼設置爲600)。我明白這是出於安全原因。但是,我無法找到任何引用或解釋行爲的文檔。任何人都可以指向我的文檔(如果有的話)?另外,有什麼方法可以覆蓋這種行爲?Java堆轉儲權限
5
A
回答
-1
堆轉儲由作爲特定用戶運行的JVM進程寫入。就像任何文件由任何創建的Linux進程一樣,它將由該用戶擁有。
如果你想要實際的文檔,here it is。請參閱O_CREAT
下的說明。
+0
我不相信這是由同一用戶創建任何其他文件。在我的環境中,我有umask用戶設置爲022.當我使用touch創建文件時,則文件權限爲644(rw-r-r-)。實際上,即使由java進程生成的日誌文件也具有umask指定的權限。但是,堆轉儲爲600(rw ----)。我相信JVM由於安全問題(bcos堆可能含有敏感數據)或使用導致此問題的系統調用而迅速設置permssns。我正在尋找解釋它的文檔以及用來覆蓋它的任何方法(h-dump不是optn之後的chmod) –
4
如果您對深度JVM內部感興趣,可以查看OpenJDK的源代碼。
下面是HeapDumper服務的鏈接:http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/src/share/vm/services/heapDumper.cpp
如果你挖,你會看到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 }
相關問題
- 1. Java堆轉儲編程
- 2. 在Java 1.4.1堆轉儲
- 3. JAVA打印堆轉儲
- 4. 限制Java核心和堆轉儲的次數
- 5. PostgreSQL的轉儲權限被拒絕
- 6. 問題採取Java堆轉儲
- 7. Java堆轉儲文件的大小
- 8. Java HPROF堆轉儲丟失字段?
- 9. 在Java堆轉儲上調用GC
- 10. 在OutOfMemoryException之前不久轉儲Java堆?
- 11. Java堆棧轉儲 - 等待鎖定
- 12. 窗口上的java堆棧轉儲
- 13. 您可以覆蓋-XX + HeapDumpOnOutOfMemoryError產生的堆轉儲的文件權限嗎?
- 14. 從Windows內存轉儲創建Java堆轉儲
- 15. Kubernetes:hostPath存儲權限
- 16. java堆的上限
- 17. UWSGI堆棧轉儲
- 18. 堆轉儲根類
- 19. Java堆轉儲是否包含線程堆棧
- 20. Linux核心轉儲vs堆轉儲?
- 21. MySQL用戶權限轉儲存儲過程
- 22. Github API存儲庫權限
- 23. Android外部存儲權限
- 24. Apache Shiro的存儲權限
- 25. MySQL存儲過程權限
- 26. Java堆大小硬限制
- 27. SharePoint 2007存儲和權限限制
- 28. 出口JProfiler的堆轉儲
- 29. 如何分析堆轉儲
- 30. 堆棧轉儲使用alloc
不是一個完整的答案二進制文件,但線程轉儲可以包含**真的**機密信息,包括您的數據庫密碼。所以你最好讓他們安全。 –
用'chmod'覆蓋它... ...? –