2012-03-12 5 views
5

Sono sandboxing R su Ubuntu 11.10 utilizzando apparmor. Una cosa ho notato è che per ogni png o pdf trama che R crea mostra l'avviso:R e getpwuid()

(process:4589): GLib-WARNING **: getpwuid_r(): failed due to: Permission denied. 

Tuttavia, anche se l'accesso in lettura a/etc/passwd è negato, tutto sembra funzionare perfettamente bene. Non ho intenzione di dare a R queste autorizzazioni, in quanto sembra non necessario per quello che voglio fare. Tuttavia, l'avviso ricorrente è alquanto fastidioso.

Un rapido grep di "getpwuid" in R/src mostra tre luoghi in cui è chiamato:

r-base-2.14.2/src/main/platform.c: stpwd = getpwuid(sb.st_uid); 
r-base-2.14.2/src/unix/sys-unix.c: stpwd = getpwuid(getuid()); 
r-base-2.14.2/src/unix/sys-unix.c: stpwd = getpwuid(geteuid()); 

Tuttavia, non molto chiaro per me quello che fa.

Domande:

  • Perché R bisogno di accedere al file passwd per la creazione di un complotto?
  • C'è un modo per impedire a R di provare a chiamare getpwuid_r() durante la scrittura su un dispositivo png o pdf (senza ricompilare R)?
+0

Sarei curioso di vedere l'output di 'strace (1)' durante la generazione dell'immagine; è difficile per me capire perché R vorrebbe conoscere il nome, l'homedirectory, il GECOS o la shell dell'utente, sebbene la shell sia la cosa più probabile che sia dopo. Il tuo profilo R richiede l'accesso in esecuzione a '/ bin/bash' o'/bin/dash'? (Disclaimer: faccio parte del team AppArmor.) – sarnold

+0

R legge molti file '~/.R *', anche da '~/.R/*'. Ma ho pensato che lo facesse solo all'avvio. OTOH ~/.Rhistory ecc sono accodati, ma ancora una volta - il nome file completo è probabilmente calcolato una sola volta. –

+0

Oppure, se potessi suggerire un modo rapido per riprodurlo da solo, sarebbe perfetto. Non conosco quasi nulla di R (nonostante diversi timidi tentativi di apprendere). – sarnold

risposta

0

La funzione interna R file.info (do_fileinfo in gdb) sembra scoprire e restituire molte informazioni sui file, incluso il nome utente.

Suppongo che lo faccia fondamentalmente per ogni file caricato in R, ma potrebbe essere solo durante il caricamento del pacchetto.

Utilizza getpwuid per eseguire questa operazione.

In questo momento sto riscontrando problemi di prestazioni in R, a causa delle lunghe risposte NIS a latenza. Sta cercando lo stesso utente molte volte durante il caricamento del pacchetto, il che mi causa ogni sorta di problema.

Vorrei che si nascondesse.