我正在使用 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 内部函数 file.info(gdb 中的 do_fileinfo)似乎可以发现并返回有关文件的大量信息,包括用户名。
我认为它基本上对 R 中加载的每个文件都这样做,但它可能只是在包加载期间。
它使用 getpwuid 来做到这一点。
我现在在 R 中遇到性能问题 - 由于 NIS 响应的长延迟。它在包加载过程中多次查找同一个用户,这给我带来了各种各样的问题。
我希望它会缓存。
关于R 和 getpwuid(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675917/