У меня есть приложение Linux, которое использует библиотеку libsctp.so. Когда я запускаю его как root, он работает нормально.Невозможно загрузить libsctp.so для пользователя без root
Но когда я запускаю его как обычный пользователь, он дает следующее сообщение об ошибке:
error while loading shared libraries: libsctp.so.1: cannot open shared object file: No such file or directory
Но, когда я LDD, как обычный пользователь, он способен видеть библиотеку:
[[email protected] src]$ ldd myapp
... ... libsctp.so.1 => /usr/local/lib/libsctp.so.1 (0x00d17000)
[[email protected] src]$ ls -lL /usr/local/lib/libsctp.so.1
-rwxrwxrwx 1 root root 27430 2009-06-29 11:26 /usr/local/lib/libsctp.so.1
[[email protected] src]$
Что может быть неправильным? Как ldd может найти libsctp.so, но при запуске приложения он не может найти одну и ту же библиотеку?
РЕДАКТИРОВАТЬ: Просто заметил, что эта проблема возникает, только если бит setuid установлен для myapp.
запустить strace на вашем приложении, посмотреть, что произойдет. Также libsctp.so.1 символическая ссылка на что-то еще? – nos
strace показывает следующий результат: open ("/ usr/lib/libsctp.so.1", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога). Кроме того, я узнал что-то еще: у этого приложения установлен бит setuid. то есть ls -l myapp: -rwsrwxr-x 1 корень root 2260821 2010-04-01 17:55 myapp. Если я удалю этот бит setuid, тогда он сможет найти библиотеку. Только если бит setuid установлен, он не может найти библиотеку. – sankoz