2012-10-04 31 views
5

Các vùng heap java được tạo ra trong một Máy Linux (và hầu hết các máy Unix có lẽ) đều có quyền truy cập bị giới hạn. Heap chỉ có thể được đọc bởi chủ sở hữu của quá trình (mặt nạ ACL được đặt thành 600). Tôi hiểu rằng đây là vì lý do bảo mật. Tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu tham khảo hoặc giải thích hành vi. Bất cứ ai có thể chỉ cho tôi tài liệu hướng dẫn (nếu có)? Ngoài ra, có cách nào để ghi đè hành vi này không?Quyền truy cập vùng heap Java

+1

Không phải là một câu trả lời hoàn chỉnh, nhưng bãi sợi có thể chứa ** thực sự ** thông tin bí mật, bao gồm cả mật khẩu cơ sở dữ liệu của bạn. Vì vậy, bạn nên giữ chúng an toàn hơn. –

+0

Ghi đè nó bằng 'chmod' ...? –

Trả lời

-1

Kết xuất đống được viết bởi quy trình JVM, chạy dưới dạng người dùng cụ thể. Giống như bất kỳ tệp nào được tạo bởi mọi quy trình Linux, nó sẽ được sở hữu bởi người dùng đó.

Nếu bạn muốn tài liệu thực tế, here it is. Hãy xem mô tả theo số O_CREAT.

+0

Tôi không tin nó giống như việc tạo bất kỳ tệp nào khác bởi cùng một người dùng. Trong môi trường của tôi, i hav umask cho người dùng được đặt thành 022. Khi tôi tạo tệp bằng cách chạm, thì quyền tệp là 644 (rw-r-r-). Trong thực tế, ngay cả các tập tin đăng nhập được tạo ra bởi quá trình java có quyền như được quyết định bởi umask. Tuy nhiên, khối đống là alwys tại 600 (rw ----). Tôi tin rằng JVM là explctly thiết lập permssns do mối quan tâm an ninh (bcos heap có thể cntain nhạy cảm dữ liệu) hoặc sử dụng một cuộc gọi hệ thống gây ra điều này. Tôi đang tìm tài liệu giải thích nó và bất kỳ phương tiện để ghi đè lên nó (chmod sau khi h-dump không phải là một optn) –

4

Nếu bạn quan tâm đến nội bộ JVM sâu, bạn có thể kiểm tra mã nguồn cho OpenJDK.

Dưới đây là một liên kết cho dịch vụ HeapDumper: http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/src/share/vm/services/heapDumper.cpp

Nếu bạn đào trong, bạn sẽ thấy JVM đang tạo ra tập tin nhị phân với 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 } 
Các vấn đề liên quan