Tại sao các thư viện chia sẻ thực thi?


59

Tại sao hầu hết tất cả các thư viện chia sẻ /usr/lib/đều có tập quyền cho phép thực thi? Tôi không thấy bất kỳ trường hợp sử dụng để thực hiện chúng. Một số người quản lý để kết nối một số dạng mainchức năng để in một bản quyền ngắn và ghi chú phiên bản, nhưng nhiều người thậm chí không làm điều đó và segfault khi thực thi.

Vì vậy, quan điểm của việc thiết lập này là xgì? Tất cả các gói thư viện phải làm điều đó? Điều gì sẽ xảy ra nếu tôi dlopen()một thư viện chia sẻ có 0644quyền?


3
Trên hệ điều hành nào (nếu Linux, phân phối gì)? Trên Debian nén, các thư viện chia sẻ thực thi duy nhất trong /lib/usr/liblà libc và libpthread, và cả hai đều in một thông báo bản quyền khi được thực thi.
Gilles 'SO- đừng trở nên xấu xa'

Nếu họ segfault, họ có thể là một lỗi nhỏ. Tôi sẽ báo cáo họ nếu bạn gặp họ. Phân phối là gì?
Faheem Mitha

@Faheem: Không có main()biểu tượng làm điểm vào không phải là một lỗi nhỏ, mà là một lựa chọn thiết kế cơ bản. Bạn đã bỏ lỡ quan điểm của tôi.
Tadeusz A. Kadłubowski

2
@Gilles: Tôi đã thấy 755 là một lựa chọn cấp phép mặc định trên các hệ thống Linux của gia đình RedHat (Fedora và Centos) và trên Solaris.
Tadeusz A. Kadłubowski

Tiền đề của câu hỏi này là không đúng sự thật. Trên thực tế, đó là sai, như đã lưu ý ở trên, đối với Debian Linux; và cũng sai cho FreeBSD và cho OpenBSD.
JdeBP

Câu trả lời:


32

Trong HP-UX, các thư viện dùng chung được ánh xạ vào bộ nhớ bằng mmap () và tất cả các trang bộ nhớ trong hệ thống đều có các bit bảo vệ được ghép nối với các cơ chế bảo vệ trang bộ nhớ của phần cứng và bộ xử lý. Để thực thi nội dung của bất kỳ trang bộ nhớ nào trên hệ thống, trang đó phải được đặt PROT_EXEC - một tính năng hữu ích để ngăn chặn việc khai thác thực thi dữ liệu.

Cuộc gọi mmap () sử dụng các bit cho phép trên tệp mà nó sắp ánh xạ để xác định các bit bảo vệ của các trang bộ nhớ được ánh xạ có chứa nó: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (từ sys / mman.h). do đó, để thư viện dùng chung có thể sử dụng được trên HP-UX, tệp chứa thư viện dùng chung phải có quyền thực thi để đảm bảo rằng thư viện được ánh xạ cũng có quyền thực thi.

Thư viện dùng chung với chế độ 644 trên hệ thống HP-UX sẽ gây ra các bãi rác cốt lõi.


Có thể các triển khai Unix khác cũng sử dụng tính năng này.
Tadeusz A. Kadłubowski

> HP-UX (từ "Hewlett Packard Unix") là triển khai độc quyền hệ điều hành Unix của Hewlett Packard Enterprise, dựa trên Hệ thống UNIX V
David 天宇 Wong

Một ví dụ khác là việc tạo các gói vòng / phút với các gói debuginfo riêng biệt yêu cầu quyền thực thi trên các thư viện dùng chung, nếu không find-debuginfo.sh bỏ qua việc xử lý chúng.
Domen Vrankar

20

Các đối tượng chia sẻ không thể thực thi hoạt động tốt, nhưng các thư viện được đánh dấu thực thi cũng có thể chạy được dưới dạng các chương trình độc lập.

Vì vậy, điểm của thiết lập x này là gì?

Không, trừ khi bạn muốn họ phát ra phiên bản hoặc thông tin khác

Tất cả các gói thư viện phải làm điều đó?

Không

Điều gì sẽ xảy ra nếu tôi dlopen () một thư viện chia sẻ có 0644 quyền?

Bạn sẽ nhận được một xử lý đối tượng chia sẻ mới (miễn là tệp có thể đọc được, v.v.) ... bit exec không ảnh hưởng đến điều này


Về lý do tại sao các thư viện không thể sử dụng như các tệp thực thi độc lập vẫn có tập bit thực thi: đây có lẽ chỉ là một vật phẩm của hệ thống xây dựng hoặc tập lệnh liên kết được sử dụng.


đầu ra ví dụ, chỉ để tham khảo:

$ /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
Hầu hết các thư viện .so chỉ đơn giản là segfault vì chúng không có gì giống với main()điểm vào thông thường . Libc là một ngoại lệ. Các nhà phát triển của nó đã làm lưu ý này như là một chức năng bổ sung. Đơn giản chmod a+xcủa bất kỳ thư viện nào khác sẽ không cung cấp cho bạn chức năng này. Tôi vẫn không thấy điểm cài đặt +xcho tất cả các thư viện.
Tadeusz A. Kadłubowski

Đồng ý và có lẽ chỉ những .sos có thể được thực thi mới được đánh dấu như vậy. Tôi sẽ sửa đổi câu trả lời của mình để tránh ngụ ý rằng mọi thứ với tập bit exec thực sự là một tệp thực thi độc lập.
Vô dụng

5
Lệnh "ldd" thường là một tập lệnh sh gọi trình liên kết động, ld-linux-x86-64.so.2 hoặc /lib/ld-linux.so.2 hoặc một số như vậy. Trình liên kết động luôn là một đối tượng chia sẻ.
Bruce Ediger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.