由于动态装入器实施了一定的限制,因此将难以使用 setuid(2) 和收集性能数据。如果您的程序调用 setuid 或执行 setuid 文件,则收集器可能无法写入实验文件,原因是它缺少新用户 ID 的必需权限。
collect 命令通过将共享库 libcollector.so 插入目标的地址空间 (LD_PRELOAD) 来运行。如果对调用 setuid 或 setgid 或创建调用 setuid 或 setgid 的子孙进程的可执行文件调用过的 collect 命令进行调用,可能会出现多个问题。如果您不是 root 用户,在运行实验时,收集会因为共享库未安装在可信目录中而失败。解决方法是以 root 用户身份运行实验,或使用 crle(1) 授予权限。应对安全障碍时请格外小心,操作风险需自行承担。
运行 collect 命令时,必须为您、由使用 exec() 执行的程序的 setuid 属性和 setgid 属性设置的任何用户或组以及该程序自身设置的任何用户或组,将 umask 设置为允许写权限。如果未正确设置掩码,某些文件可能无法写入实验,并且可能无法处理实验。如果可以写入日志文件,尝试处理实验时将显示错误。
如果目标本身发出了设置 UID 或 GID 的任何系统调用,或者如果目标更改其 umask,然后对其他某个可执行文件派生或运行 exec(),或者 crle 用于配置运行时链接程序如何搜索共享对象,则可能会出现其他问题。
如果在更改其有效 GID 的目标上以 root 用户身份启动实验,实验终止时自动运行的 er_archive 进程将失败,原因是它需要未标记为可信的共享库。在这种情况下,您可以在实验终止后立即在记录实验的计算机上运行 er_archive 实用程序(或 er_print 实用程序或 analyzer 命令)。