2012-10-04 30 views
5

Los volcados del almacenamiento dinámico Java generados en una máquina Linux (y muy probablemente también en máquinas Unix) tienen acceso restringido. El montón solo puede ser leído por el propietario del proceso (la máscara de ACL se establece en 600). Entiendo que esto es por razones de seguridad. Sin embargo, no pude encontrar ninguna documentación que haga referencia o explique el comportamiento. ¿Alguien puede indicarme la documentación (si corresponde)? Además, ¿hay alguna manera de anular este comportamiento?Permisos de volcado del montón Java

+1

No es una respuesta completa, pero vertederos hilo puede contener ** realmente ** información confidencial, incluida la contraseña de su base de datos. Así que será mejor que los mantengan a salvo. –

+0

Anularlo con 'chmod' ...? –

Respuesta

-1

El volcado de pila está escrito por el proceso de JVM, que se ejecuta como un usuario particular. Al igual que cualquier archivo creado por cualquier proceso de Linux, será propiedad de ese usuario.

Si desea la documentación actual, here it is. Mira la descripción bajo O_CREAT.

+0

No creo que sea como crear cualquier otro archivo por el mismo usuario. En mi entorno, hev umask para el usuario configurado en 022. Cuando creo un archivo usando touch, los permisos de archivo son 644 (rw-r-r-). De hecho, incluso los archivos de registro generados por el proceso java tienen permisos según lo dictado por umask. Sin embargo, el volcado de pila está siempre en 600 (rw ----). Creo que JVM está estableciendo permssns debido a problemas de seguridad (bcos heap puede contener datos confidenciales) o usando una llamada al sistema que causa esto. Estoy buscando documentación que lo explique y cualquier medio para anularlo (chmod después de que h-dump no sea un optn) –

4

Si está interesado en la parte interna de JVM profunda, puede consultar el código fuente de OpenJDK.

Aquí hay un enlace para el servicio HeapDumper: http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/src/share/vm/services/heapDumper.cpp

Si se mira en, verá JVM es la creación de archivos binarios con 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 } 
Cuestiones relacionadas