У меня есть библиотека librandom.so
и main
exectuable, которая была скомпилирована следующим образом:
$ clang++ -o main main.o -lrandom -L. -Wl,-rpath,"\$ORIGIN"
Они оба находятся в одном каталоге. Поскольку main
имеет $ORIGIN
в своем rpath
, он отлично работает - ./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
из его содержащей каталог?