The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Shared libraries permissions"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Shared libraries permissions"  +/
Сообщение от dimonna (ok) on 10-Янв-11, 16:06 
Здравствуйте,

Разыскивается спецификация, определяющая какие права доступа должны быть у shared library (.so).

Заранее огромное спасибо всем кто сможет направить по правильному пути.

Дмитрий

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 14-Янв-11, 17:28 
> Здравствуйте,
> Разыскивается спецификация, определяющая какие права доступа должны быть у shared library
> (.so).
> Заранее огромное спасибо всем кто сможет направить по правильному пути.

Либа загружается через dlopen(), dlopen() юзает mmap(), у mmap есть флаг PROT_EXEC,
т.е. страница памяти может быть исполняемой (но вроде как борются с этим, тот же флаг NX у процессоров),
в общем, по этому надо 755. Write на владельца нужен, если тот надумает изменять или обновлять, на всякий случай короче.


Но!!!

Portable programs should always set PROT_EXEC if they intend to execute code in the new mapping.

:)

man mmap
man dlopen

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Shared libraries permissions"  +/
Сообщение от dimonna (ok) on 25-Янв-11, 10:02 
Спасибо за ответ. А можете плз дать ссылку на место откуда взята эта цитата:

> Portable programs should always set PROT_EXEC if they intend to execute code
> in the new mapping.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 14:26 
> Спасибо за ответ. А можете плз дать ссылку на место откуда взята
> эта цитата:
>> Portable programs should always set PROT_EXEC if they intend to execute code
>> in the new mapping.

man mmap ну или https://www.kernel.org/doc/man-pages/online/pages/man2/mmap....

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 14:45 
А какая связь между флагом PROT_EXEC для mmap() и execute permissions у .so файла???
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Shared libraries permissions"  +/
Сообщение от ACCA (ok) on 25-Янв-11, 14:56 
> А какая связь между флагом PROT_EXEC для mmap() и execute permissions у
> .so файла???

Было бы логично выставлять PROT_EXEC только в случае, если есть execute permission у файла.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 15:04 
> Было бы логично выставлять PROT_EXEC только в случае, если есть execute permission
> у файла.

Возможно, но в какой системе mmap() ведет себя так? т.е. не дает поставить PROT_EXEC при отсутствии прав на выполнения файла.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 15:32 
> А какая связь между флагом PROT_EXEC для mmap() и execute permissions у
> .so файла???

Пиши, для совместимости. :)


dlopen() -> dlsym(), обе эти функции вызывают mmap.
mmap() должен использовать PROT_EXEC, для портабильности.
на некоторых системах, mmap c PROT_EXEC, библиотеку откроет и символы загрузит,
но выполнить не разрешит ядро, если у нее нету EXECUTE PERMISSIONS. (Подозреваю что это VAX/VMS|Alpha/VMS)


      

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 15:39 
>> А какая связь между флагом PROT_EXEC для mmap() и execute permissions у
>> .so файла???
>
 
> #include <stdio.h>
> #include <dlfcn.h>
> mprotect(0x7f069c77b000, 4096, PROT_READ) = 0
> munmap(0x7f069c526000, 2449592)         = 0
> ...

Эм... Вы хотите сказать что если перед этим сделать chmod 644 /usr/lib64/tls/libm.so то что-то измениться?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 15:44 
>> А какая связь между флагом PROT_EXEC для mmap() и execute permissions у
>> .so файла???
> Пиши, для совместимости. :)

Ой пока квоту тер вы пост поправили)))
Для совместимости с чем именно?

PS:
Гугл находит что +x хотел hpux 98 года разлива, интересно есть ли более живые системы в которых ld.so или его аналог требует +x.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 15:59 
>>> А какая связь между флагом PROT_EXEC для mmap() и execute permissions у
>>> .so файла???
>> Пиши, для совместимости. :)
> Ой пока квоту тер вы пост поправили)))
> Для совместимости с чем именно?

Вам накой это надо?

Для курсовой/дипломной - пиши 755, для совместимости и портабильности кода.
для себя, ставь 644, тока потом не удивляйся, если какая-то утиль проверяет наличие EXEC

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 16:12 
>> Для совместимости с чем именно?
> Вам накой это надо?

Для самобразования типа)

> Для курсовой/дипломной - пиши 755, для совместимости и портабильности кода.
> для себя, ставь 644, тока потом не удивляйся, если какая-то утиль проверяет
> наличие EXEC

Так я и прошу вас удивить меня назвав более менее живую систему для которой документировано такое поведение)
Что касается "какой-то утилиты", то на отсутствие +x например ругался ldd в линуксах времен 2.0 хотя ld.so при этом спокойно работал.

Пока складывается впечатление что 755 для .so это анахронизм:)


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 16:19 
> Пока складывается впечатление что 755 для .so это анахронизм:)

Для Linux + x86 скорее всего.

А так как все ставят 755, никто толком и не знает, что будет если выставить 444 :)


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 16:29 
>> Пока складывается впечатление что 755 для .so это анахронизм:)
> Для Linux + x86 скорее всего.

Например для Free/OpenBSD 444 для .so штатно на всех архитектурах.

> А так как все ставят 755, никто толком и не знает, что
> будет если выставить 444 :)

А ничего не будет, греп по сырцам ld-linux никаких плясок с пермишенами не находит)

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 16:45 
> А ничего не будет, греп по сырцам ld-linux никаких плясок с пермишенами не находит)

Если раздел примонтирован с "noexec", ядро само снимает PROT_EXEC у mmap()
http://lxr.linux.no/#linux+v2.6.37/mm/mmap.c#L976


# cp /lib64/libm-2.11.3.so /boot
# mount -o remount,ro,noexec /boot


#include <stdio.h>
#include <dlfcn.h>

int main(void) {

    double (*cosinus)(double);
    void *math = dlopen("/boot/libm-2.11.3.so", RTLD_LAZY);

    cosinus = dlsym(math,"cos");
    printf ("%f\n", (*cosinus)(-3.1415));

    dlclose(math);
return 0;
}

# gcc test.c -ldl
# ./a.out
Ошибка сегментирования

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 16:53 
> Более того, если раздел примонтирован с "noexec", ядро само снимает PROT_EXEC у
> mmap()
> http://lxr.linux.no/#linux+v2.6.37/mm/mmap.c#L976

Более чего?
так же ведут себя и *bsd, но опять же, я не возьму в толк причем тут +x у .so?

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 17:04 
> ... но опять же, я не возьму в толк причем тут +x у .so?

Да никакого, если его нет, ядро добавит само,
если примонтировано с noexec уберёт его.

http://lxr.linux.no/#linux+v2.6.37/mm/mmap.c#L966


Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 17:15 
Как итог треда, будем считать что на современных юниксах пофиг наличие/отсутсвие +x для .so :)

ЗЫ: заглянул на debian - 644

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 17:21 
> Как итог треда, будем считать что на современных юниксах пофиг наличие/отсутсвие +x
> для .so :)

Типа того, ....

как я понял,

if ((prot & PROT_READ) && (current->personality & READ_IMPLIES_EXEC))

если есть флаг на чтение, и текущая реализация персонализации PROT_READ
предоставляет выполнение, то флаг PROT_READ равен PROT_READ + PROT_EXEC :)
Фуф... :)

Где current->personality не READ_IMPLIES_EXEC нинайду %-)


> ЗЫ: заглянул на debian - 644

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 25-Янв-11, 17:27 
> Где current->personality не READ_IMPLIES_EXEC нинайду %-)

Если и найдется такая архитектура (я б смотрел в сторону свежих ARM), то 755 vs 644 явно будет не самой большой проблемой при портировании :)))

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "Shared libraries permissions"  +/
Сообщение от pavlinux (ok) on 25-Янв-11, 18:05 
>> Где current->personality не READ_IMPLIES_EXEC нинайду %-)
> Если и найдется такая архитектура (я б смотрел в сторону свежих ARM),
> то 755 vs 644 явно будет не самой большой проблемой при
> портировании :)))

Пока нашёл
IBM S390

ARM говорит, что

Set READ_IMPLIES_EXEC if:
   - the binary requires an executable stack
   - we're running on a CPU which doesn't support NX.

         if (cpu_architecture() < CPU_ARCH_ARMv6)
                 return error;
  

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Shared libraries permissions"  +/
Сообщение от guest email(??) on 26-Янв-11, 10:34 
> Пока нашёл
> IBM S390

http://www-03.ibm.com/systems/z/os/linux/support/lcds/toc.html
IBM вроде как дает шел на майнфреймах с линуксом, если не лень можно зарегистрироваться и посмотреть на такую экзотику :)

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру