У меня есть библиотека 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 из его содержащей каталог?