问题描述
我是 Stack Overflow 的新手,也许我的问题描述很复杂,抱歉。
我将一个 C++ 程序编译成二进制可执行文件 mygraph
然后我用sudo chmod u+s mygraph
给它一个“设置uid权限”,文件所有者和组是root:root,我用普通用户ezeta
来执行mygraph
。
mygraph 需要一个 LD_LIBRARY_PATH 环境,所以我使用 env 命令来执行 mygraph
,但它不起作用,因为系统提示 ./mygraph: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory
。
我认为是因为 env 命令不起作用。 这是启动命令:
$ env LD_LIBRARY_PATH=./bundle/lib:./bundle/jre/lib/amd64/server ./mygraph
./mygraph: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory
$
$
$ ll .
total 272
drwxrwxr-x 9 ezeta ezeta 4096 Jan 8 11:35 ./
drwxrwxr-x 7 ezeta root 4096 Jan 8 14:01 ../
drwxrwxr-x 4 ezeta ezeta 4096 Jan 6 16:26 bundle/
-rwsrwxr-x 1 root root 205384 Jan 8 14:01 mygraph*
mygraph 权限是 rws rwx r-x,我知道我用 ezeta 运行 mygraph 会有 root 权限,因为 s 权限。但也许 env 命令将 LD_LIBRARY_PATH 设置为 ezeta
而不是 root
。
如何通过用户 ezeta 使用 env 命令或其他方式将 LD_LIBRARY_PATH 设置为 root
?
ps:我不能使用 -rpath 在 ELF 头中写入 LD_LIBRARY_PATH,因为我需要防止这条路径被篡改。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)