【发布时间】:2017-01-22 01:10:24
【问题描述】:
我有一个librandom.so 库和一个main 可执行文件,编译如下:
$ clang++ -o main main.o -lrandom -L. -Wl,-rpath,"\$ORIGIN"
它们都在同一个目录中。因为main 在其rpath 中有$ORIGIN,所以它工作正常 - ./main 返回没有错误。
现在,我将main 设置为与setuid 一起作为root 运行:
$ sudo chown root main
$ sudo chmod a+s main
$ ./main
我预计main 会失败,因为$ORIGIN 没有在setuid 应用程序中扩展。令人惊讶的是,它有效。
但是,如果我从另一个目录运行 main,它确实会按预期失败:
$ cd /tmp
$ /path/to/main
/path/to/main: error while loading shared libraries: librandom.so: cannot open shared object file: No such file or directory
为什么当我从其包含目录运行main 时它会起作用?
【问题讨论】:
标签: c++ shared-libraries clang++ setuid