R 和 getpwuid()

标签 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 中“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)?
  • 最佳答案

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

    我认为它基本上对 R 中加载的每个文件都这样做,但它可能只是在包加载期间。

    它使用 getpwuid 来做到这一点。

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

    我希望它会缓存。

    关于R 和 getpwuid(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675917/

    相关文章:

    r - 对于数据框的所有列,每 n 行的平均值和中值,同时将日期时间对象保留为索引

    ubuntu - 无法在 Docker 中重新加载或启动 AppArmor

    kubernetes - 启用默认的secomp和apparmor配置文件,集群级别

    docker - 让Apparmor在Docker容器上工作

    docker - Docker容器由于apparmor而无法启动,为什么?

    r - 字符串拆分后访问第 n 个元素

    替换列表列表中的元素

    r - 根据某一特定行对热图进行排序

    r - 无法根据函数参数创建列表

    MySQL 没有在 Ubuntu 16.04 上获取 5.7.13 中的符号链接(symbolic link) cnf 更改