5

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

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

然而,即使对 /etc/passwd 的读取访问被拒绝,一切似乎都运行良好。我不打算给 R 这些权限,因为我想做的事情似乎没有必要。然而,反复出现的警告有点烦人。

R/src 中“getpwuid”的快速 grep 显示了调用它的三个位置:

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)?
4

1 回答 1

0

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

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

它使用 getpwuid 来执行此操作。

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

我希望它会缓存。

于 2013-03-06T07:33:39.033 回答