屏幕未设置LD_LIBRARY_PATH


13

screen在bash中运行将擦除变量LD_LIBRARY_PATH。我已经读了一些书,看来这是预期的行为,但是我需要解决它。

解决方法是将LD_LIBRARY_PATH声明添加到中~/.bashrc。就我而言,在启动外壳程序和调用屏幕之间,LD_LIBRARY_PATH发生了很大变化,因此我需要将LD_LIBRARY_PATH 的当前值放入screen会话中。


您在运行屏幕之前已导出LD_KLIBRARY_PATH?
kinnou02 2011年

超级用户问题。
karlphillip 2011年

抱歉,我可以以某种方式将其移开,还是应该删除并重新发布?

如果您获得五票接近的票数,它将自动在那被撞。还有一个!
Thomas

Answers:


14

screen不会取消设置环境变量;Linux本身已将其删除。

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

在Linux上,运行setuid(或setgid)程序时,它不会接收某些环境变量(包括LD_LIBRARY_PATH,其他几个LD_*变量和HOSTALIASES),以减少可能的攻击点:否则,您可以编写一个小的库并欺骗susudo这样调用您的“改进”功能。


您可以从中删除setgidscreen,但是必须使套接字目录对所有人完全可用(模式0777)。但是,这不应该带来安全风险,因为screen它还可以检查附加程序的UID本身。

但是,你应该不会使utmp数据库全球可写的。


(注意:我不太确定环境变量是由内核,ld-linux.so还是glibc运行时删除的。)
user1686 2014年

工作真的很好。这些是需要完成的命令:chgrp root $(which screen)chmod 777 /var/run/screen。您可以使用以下小型bash脚本进行测试:while true; do echo $LD_LIBRARY_PATH; sleep 2; done 您将看到路径已成功显示。谢谢,谢谢。
lepe 2015年

7

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

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

这是在启动外壳程序之前设置的。显然LD_LIBRARY_PATH_SCREEN需要在开始屏幕之前进行设置。


1
请参阅grawity的答案-LD_LIBRARY_PATH在此上下文中是一个特殊变量。即使此方法有效(setenv不必为'=',顺便说一句),重命名我们尝试设置的环境变量也不会很有帮助;程序仍会查看规范名称(请参阅stackoverflow.com/questions/13974069/…)。
Andrew Wood

比的更正。我修复了语法,却忘记了在环境启动屏幕中有另一个变量。在_SCREEN一个可以在你的RC文件或在开始屏幕上一个包装脚本来设置。
Droj

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.