공유 라이브러리가 실행 가능한 이유는 무엇입니까?


59

거의 모든 공유 라이브러리에 /usr/lib/실행 가능 권한 비트가 설정 되어 있는 이유는 무엇 입니까? 그들을 실행하는 유스 케이스가 보이지 않습니다. 일부는 main짧은 저작권 및 버전 노트를 인쇄하기 위해 어떤 형태의 기능을 연결하지만, 많은 사람들은 그렇게하지 않고 실행시 segfault를 수행합니다.

그래서 이것을 설정하는 요점은 무엇 x입니까? 모든 도서관 포장업자가 그렇게해야합니까? 권한 dlopen()이있는 공유 라이브러리 인 경우 어떻게 0644됩니까?


3
어떤 OS (Linux의 경우 어떤 배포판)에서? 데비안 스퀴즈에서 유일한 실행 파일 공유에서 라이브러리 /lib/usr/liblibc의와 점 libpthread하며, 실행시 모두 저작권 표시를 인쇄 할 수 있습니다.
Gilles

만약 그들이 segfault라면, 그들은 아마도 사소한 버그 일 것입니다. 당신이 그들을 만나면 나는 그들을보고합니다. 분포는 무엇입니까?
Faheem Mitha 2016 년

@Faheem : main()진입 점 으로 기호가없는 것은 사소한 버그가 아니라 기본적인 디자인 선택입니다. 내 요점을 놓쳤다
Tadeusz A. Kadłubowski 2016 년

2
@Gilles : RedHat 제품군 Linux 시스템 (Fedora 및 Centos) 및 Solaris에서 기본 권한 선택으로 755를 보았습니다.
Tadeusz A. Kadłubowski 2016 년

이 질문의 전제는 보편적으로 사실이 아닙니다. 사실 위에서 언급 한 것처럼 데비안 리눅스의 경우에는 거짓입니다. FreeBSD 및 OpenBSD의 경우도 마찬가지입니다.
JdeBP

답변:


32

HP-UX에서 공유 라이브러리는 mmap ()을 사용하여 메모리에 매핑되며 시스템의 모든 메모리 페이지에는 커널 및 프로세서 하드웨어의 메모리 페이지 보호 메커니즘과 연결된 보호 비트가 있습니다. 시스템에서 메모리 페이지의 내용을 실행하려면 해당 페이지에 데이터 실행 악용을 방지하는 유용한 기능인 PROT_EXEC가 설정되어 있어야합니다.

mmap () 호출은 맵핑하려는 파일의 권한 비트를 사용하여 맵핑 할 메모리 페이지의 보호 비트를 정의합니다. rwx-> PROT_READ | PROT_WRITE | PROT_EXEC (from sys / mman.h). 따라서 HP-UX에서 공유 라이브러리를 사용하려면 공유 라이브러리를 포함하는 파일에 실행 권한이 있어야 매핑 된 라이브러리에도 실행 권한이 있습니다.

HP-UX 시스템에서 모드 644의 공유 라이브러리로 인해 코어 덤프가 발생합니다.


다른 유닉스 구현에서도이 기능을 사용합니다.
Tadeusz A. Kadłubowski

> HP-UX ( "Hewlett Packard Unix")는 UNIX 시스템 V를 기반으로하는 Hewlett Packard Enterprise의 유닉스 운영 체제 독점 구현
David 天宇 Wong

다른 예는 별도의 debuginfo 패키지로 rpm 패키지를 만들려면 공유 라이브러리에 대한 실행 권한이 필요하고 그렇지 않으면 find-debuginfo.sh가 처리를 건너 뜁니다.
도멘 브랑 카

20

실행 불가능한 공유 객체는 정상적으로 작동하지만 실행 가능으로 표시된 라이브러리 는 독립형 프로그램 으로 실행 가능할 수도 있습니다.

이 x를 설정하는 요점은 무엇입니까?

버전이나 기타 정보를 제공하지 않는 한 없음

모든 도서관 포장업자가 그렇게해야합니까?

아니

권한이 0644 인 공유 라이브러리를 dlopen ()하면 어떻게됩니까?

파일을 읽을 수있는 한 새로운 공유 객체 핸들을 얻게됩니다. exec 비트는 이것에 영향을 미치지 않습니다


독립형 실행 파일로 사용할 수없는 라이브러리에 여전히 exec 비트 세트가있는 이유는 아마도 빌드 시스템 또는 링크 스크립트의 인공물 일뿐입니다.


참조 용 출력 예 :

$ /lib/i386-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.6.3.
Compiled on a Linux 3.2.14 system on 2012-04-19.
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU Libidn by Simon Josefsson
    Native POSIX Threads Library by Ulrich Drepper et al
    BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

11
대부분의 .so 라이브러리는 일반적인 main()진입 점 과 비슷한 것이 없기 때문에 단순히 segfault 입니다. Libc는 특이 치입니다. 개발자들은이 기능을 추가 기능으로 사용했습니다. 간단한 chmod a+x다른 라이브러리는 당신이 functionality` 난 아직 설정 지점이 표시되지 않습니다 제공하지 않습니다 +x모든 라이브러리를.
Tadeusz A. Kadłubowski 2016 년

동의 .so할 수 있으며 아마도 실행될 수있는 것만 표시해야합니다. exec 비트 세트가있는 모든 것이 실제로 독립 실행 형임을 암시하지 않도록 내 대답을 수정하겠습니다.
쓸모없는

5
"ldd"명령은 일반적으로 동적 링커, ld-linux-x86-64.so.2 또는 /lib/ld-linux.so.2 또는 일부를 호출하는 sh 스크립트입니다. 동적 링커는 항상 공유 객체입니다.
Bruce Ediger 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.