Связывание с общей библиотекой с помощью setuid - PullRequest
0 голосов
/ 30 мая 2019

Я хочу создать ссылку на разделяемую библиотеку, владелец которой изменен на root и установлен setuid:

$ ls -la
total 3616
drwxrwxr-x 2 chiron chiron    4096 Mai 29 21:59 .
drwxrwxr-x 4 chiron chiron    4096 Mai 29 23:16 ..
-rwsr-xr-x 1 root   chiron 3692440 Mai 29 21:59 chiron_lowlevel_controller_node

Когда я запускаю исполняемый файл, я получаю следующую ошибку:

$ ./chiron_lowlevel_controller_node
./chiron_lowlevel_controller_node: error while loading shared libraries: libxmlrpcpp.so: cannot open shared object file: No such file or directory

Это смущает меня, потому что ldd возвращает:

$ ldd chiron_lowlevel_controller_node | grep xml
libxmlrpcpp.so => /opt/ros/melodic/lib/libxmlrpcpp.so (0x00007effe8c86000)

И libxmlrpcpp.so действительно существует:

$ ls -la | grep xml
-rw-r--r--  1 root root  122608 Mär 18 19:03 libxmlrpcpp.so

Я также знаю, что libxmlrpcpp.so не поврежден или около того, потому что, когда я удаляю setuid и меняю владельца на chiron, ошибка не возникает.

Дополнительный вопрос:

$ readelf -d chiron_lowlevel_controller

возвращает много каталогов в RUNPATH:

0x000000000000001d (RUNPATH)            Library runpath: [Many:Directories:Separated:By:Double:Dots]

Но если я переместу libxmlrpcpp.so в один из этих каталогов,

$ ldd chiron_lowlevel_controller_node | grep xml
libxmlrpcpp.so => not found

Эта статья утверждает, что ldd ищет во всех каталогах runpath общую библиотеку, так почему же это не работает, когда я перемещаю общую библиотеку? Или эта статья не так?

Системная информация:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic
...