R和getpwuid()

时间:2012-03-12 22:49:57

标签: r apparmor

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

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

但是,即使对/ 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());

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

问题:

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

1 个答案:

答案 0 :(得分:0)

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

我认为它基本上是为R中加载的每个文件执行此操作,但它可能只是在程序包加载期间。

它使用getpwuid来执行此操作。

由于NIS响应时间长,我现在在R中遇到了性能问题。在程序包加载过程中,它会多次查找同一个用户,这会导致各种各样的问题。

我希望它会缓存。