【发布时间】:2012-03-29 08:59:45
【问题描述】:
我正在使用 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)?
【问题讨论】:
-
我很想在生成图像时看到
strace(1)的输出;我很难理解为什么 R 想要知道用户名、主目录、GECOS 或 shell,尽管 shell 最有可能是它所追求的。您的 R 配置文件是否需要对/bin/bash或/bin/dash的执行访问权限? (免责声明:我是 AppArmor 团队的一员。) -
R 确实读取了很多
~/.R*文件,甚至来自~/.R/*也是如此。但我认为它只在启动时这样做。 OTOH ~/.Rhistory 等被附加,但同样 - 完整的文件名可能只计算一次。 -
或者,如果您能建议我自己快速重现此内容的方法,那就太好了。我对 R 几乎一无所知(尽管有几次半心半意的学习尝试。)
-
它真的是 R 源代码中的 getpwuid 调用之一吗?错误消息来自 GLib 和 getpwuid_r - 它可能是 GLib 中的调用,它来自使用 GLib 的图形库之一(如 libPNG)。真正的问题是为什么图形库需要访问 /etc/passwd...
-
我刚刚尝试了 chmod o-r /etc/passwd 然后在 R 中创建了一个 png - 根本没有 GLib 警告。 strace'ing R 显示它经常访问 /etc/passwd。