2012-10-04 18 views
5

I dump dell'heap java generati in una macchina Linux (e probabilmente anche nelle macchine Unix) hanno accesso limitato. L'heap può essere letto solo dal proprietario del processo (la maschera ACL è impostata su 600). Capisco che questo è per motivi di sicurezza. Tuttavia, non sono stato in grado di trovare alcuna documentazione che faccia riferimento o che spieghi il comportamento. Qualcuno può indicarmi la documentazione (se presente)? Inoltre, c'è un modo per ignorare questo comportamento?Autorizzazioni di dumping Heap Java

+1

Non è una risposta completa, ma discariche thread può contenere ** veramente ** informazioni riservate, compresa la password del database. Quindi farai meglio a tenerli al sicuro. –

+0

Sovrascrivi con 'chmod' ...? –

risposta

-1

Il dump dell'heap è scritto dal processo JVM, che viene eseguito come utente particolare. Proprio come qualsiasi file creato da qualsiasi processo Linux, sarà di proprietà di tale utente.

Se si desidera la documentazione effettiva, here it is. Guarda la descrizione sotto O_CREAT.

+0

Non credo che sia come creare qualsiasi altro file dallo stesso utente. Nel mio ambiente, ho umask per l'utente impostato su 022. Quando creo un file tramite touch, i permessi dei file sono 644 (rw-r-r-). Infatti, anche i file di log generati dal processo java hanno le autorizzazioni dettate da umask. Tuttavia, lo heap dump è alwys a 600 (rw ----). Credo che JVM stia configurando i permssns in modo esplicito a causa di problemi di sicurezza (l'heap di bcos può contenere dati sensibili) o l'uso di una chiamata di sistema che causa questo. Sto cercando una documentazione che lo spieghi e qualsiasi mezzo per sovrascriverlo (chmod dopo h-dump non è un optn) –

4

Se si è interessati a interni JVM profondi, è possibile controllare il codice sorgente per OpenJDK.

Ecco un link per il servizio di HeapDumper: http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/src/share/vm/services/heapDumper.cpp

Se si scava dentro, vedrete JVM è la creazione di file binari 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 } 
Problemi correlati