R和getpwuid()

Jer*_*oen 5 r apparmor

我使用apparmor在Ubuntu 11.10上沙箱R. 我注意到的一件事是,对于R创建的每个png或pdf图,它都会显示警告:

(process:4589): GLib-WARNING **: getpwuid_r(): failed due to: Permission denied.
Run Code Online (Sandbox Code Playgroud)

但是,即使拒绝对/ etc/passwd的读访问,一切似乎都运行得很好.我不打算给R这些权限,因为它似乎没有必要我想做什么.然而,反复出现的警告有点令人讨厌.

R/src中的快速grep"getpwuid"显示了调用它的三个地方:

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());
Run Code Online (Sandbox Code Playgroud)

但是,我不清楚这是做什么的.

问题:

  • 为什么R需要访问passwd文件才能创建绘图?
  • 有什么办法可以阻止R在写入png或pdf设备时调用getpwuid_r()(不重新编译R)?

Ale*_*own 0

R 内部函数 file.info(gdb 中的 do_fileinfo)似乎发现并返回有关文件的大量信息,包括用户名。

我假设它基本上对 R 中加载的每个文件都执行此操作,但可能只是在包加载期间。

它使用 getpwuid 来执行此操作。

由于 NIS 响应延迟较长,我现在在 R 中遇到性能问题。它在包加载过程中多次查找同一用户,这给我带来了各种各样的问题。

我希望它能缓存。