Не уверен, принадлежит ли это сюда или на superuser.com.
Я борюсь с тем, чтобы заставить работать процесс C, который необходимо связать в динамических библиотеках Oracle.
Он компилируется и отлично работает под пользователем oracle (против которого был установлен пользователь oracle), но не под другой учетной записью. Очевидная причина заключается в том, что установка oracle по умолчанию не разрешает чтение или выполнение ни одной из разделяемых библиотек в / lib.
Я предоставил всем r + x для базового dylib (эквивалентно .so и т. Д.) И, выполняя под пользователем oracle, я получаю следующие результаты
ls -lrt *odm*
-rwxr-xr-x 1 oracle dba 9000 Mar 3 2009 libodmd10.dylib
lrwxrwx--- 1 oracle dba 15 Jul 25 14:23 libodm10.dylib -> libodmd10.dylib
Проделав то же самое под другим моим пользователем (тем, под которым я хочу выполнить), я получаю следующее
ls -lrt libodmd10.dylib
-rwxr-xr-x 1 oracle dba 9000 Mar 3 2009 libodmd10.dylib
ls -lrt libodm10.dylib
ls: libodm10.dylib: Permission denied
lrwxrwx--- 1 oracle dba 15 Jul 25 14:23 libodm10.dylib
Я подозреваю, что ответ невероятно глуп и прост, но я понял, что символические ссылки унаследовали разрешения от базового файла.
ls
не заботится о разрешениях файла, потому что он только перечисляет его запись в каталоге. Однако когда ls
разыменовывает символическую ссылку, происходит доступ к содержимому ссылки. Так что он заботится о разрешениях ссылки. Здесь у вас нет разрешения читать, что является целью libodm10.dylib
если вы не в dba
группа.
Вам также необходимо изменить разрешения символьной ссылки. Здесь нет причин не делать ссылку доступной для чтения всем.
Обратите внимание, что некоторые Unices просто не поддерживают разрешения на символическую ссылку; OSX делает.
Если бит выполнения в родительском каталоге файла не включен для вашего пользователя или группы, вы не можете «искать» в этом каталоге.