LD_LIBRARY_PATH 被屏幕取消设置

LD_LIBRARY_PATH 被屏幕取消设置

在 bash 中运行screen会清除变量 LD_LIBRARY_PATH。我读了一些资料,似乎这是预期的行为,但我需要绕过它。

解决方法是将 LD_LIBRARY_PATH 声明添加到~/.bashrc。在我的例子中,LD_LIBRARY_PATH 在启动 shell 和我调用 screen 之间发生了很大变化,所以我需要获取当前的LD_LIBRARY_PATH 的值进入screen会话。

答案1

screen不会取消设置环境变量;它会被 Linux 本身删除。

在大多数系统上,/usr/bin/screen可执行文件与设置组IDutmp组,以便能够修改utmp数据库。它还使用设置组ID控制对套接字目录的访问(/var/run/screen/)。

在 Linux 上,当设置用户标识(或者设置组ID) 程序运行时,它不会接收某些环境变量(包括LD_LIBRARY_PATH、其他几个LD_*变量和HOSTALIASES),以减少可能的攻击点:否则您可以编写一个小型库并欺骗susudo以这种方式调用您的“改进”函数。


您可以删除设置组IDscreen,但您必须让套接字目录可供所有人完全访问(模式 0777)。不过,这不应该是一个安全风险,因为它screen还会检查附加程序的 UID 本身。

然而,你应该不是使utmp数据库可全世界写入。

答案2

在您的 中.screenrc,您可以使用setenv命令在屏幕的环境中设置一个值。

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

这是在 shell 启动前设置的。显然LD_LIBRARY_PATH_SCREEN需要在启动 screen 前设置。

答案3

尝试export您感兴趣的环境变量。

export LD_LIBRARY_PATH

答案4

保留LD_LIBRARY_PATH变量的另一种方法是运行里面的命令,screen如下所示:

screen -dmLS compile bash -lc "make -j12"

相关内容