Mengapa perpustakaan bersama dapat dieksekusi?


59

Mengapa hampir semua pustaka bersama /usr/lib/memiliki set bit izin yang dapat dieksekusi? Saya tidak melihat ada kasus penggunaan untuk mengeksekusi mereka. Beberapa memang berhasil menghubungkan beberapa bentuk mainfungsi untuk mencetak catatan hak cipta dan versi singkat, tetapi banyak yang tidak melakukan hal itu dan melakukan segmentasi saat eksekusi.

Jadi, apa gunanya mengatur ini x? Haruskah semua pembuat paket perpustakaan melakukan itu? Apa yang akan terjadi jika saya dlopen()perpustakaan bersama yang memiliki 0644izin?


3
Pada OS apa (jika Linux, distribusi apa)? Pada pemerasan Debian, satu-satunya pustaka bersama yang dapat dieksekusi /libdan /usr/liblibc dan libpthread, dan keduanya mencetak pemberitahuan hak cipta saat dijalankan.
Gilles 'SANGAT berhenti menjadi jahat'

Jika mereka segfault, mereka mungkin bug kecil. Saya akan melaporkannya jika Anda menemukan mereka. Apa distribusinya?
Faheem Mitha

@Faheem: Tidak memiliki main()simbol sebagai titik masuk bukan bug kecil, tetapi pilihan desain mendasar. Anda melewatkan poin saya.
Tadeusz A. Kadłubowski

2
@Gilles: Saya telah melihat 755 sebagai pilihan izin default pada sistem Linux RedHat-family (Fedora dan Centos), dan di Solaris.
Tadeusz A. Kadłubowski

Premis dari pertanyaan ini tidak sepenuhnya benar secara universal. Sebenarnya itu salah, seperti disebutkan di atas, untuk Debian Linux; dan juga false untuk FreeBSD dan untuk OpenBSD.
JdeBP

Jawaban:


32

Di bawah HP-UX, pustaka bersama dipetakan ke dalam memori menggunakan mmap (), dan semua halaman memori dalam sistem memiliki bit perlindungan yang digabungkan dengan mekanisme perlindungan halaman memori perangkat keras kernel dan prosesor. Untuk menjalankan konten halaman memori apa pun pada sistem, halaman itu harus memiliki set PROT_EXEC - fitur yang berguna untuk mencegah eksploitasi eksekusi data.

Panggilan mmap () menggunakan bit izin pada file yang akan dipetakan untuk menentukan bit perlindungan dari halaman memori yang dipetakan yang berisi itu: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (dari sys / mman.h). jadi agar pustaka bersama agar dapat digunakan pada HP-UX, file yang berisi pustaka bersama harus memiliki izin eksekusi untuk memastikan bahwa pustaka yang dipetakan juga memiliki izin eksekusi.

Pustaka bersama dengan mode 644 pada sistem HP-UX akan menyebabkan dump inti.


Kemungkinan implementasi Unix lainnya menggunakan fitur ini juga.
Tadeusz A. Kadłubowski

> HP-UX (dari "Hewlett Packard Unix") adalah implementasi hak milik sistem operasi Unix milik Hewlett Packard Enterprise, berdasarkan Sistem UNIX V
David 天宇 Wong

Satu contoh lain adalah bahwa membuat paket-paket rpm dengan paket-paket debuginfo yang terpisah membutuhkan izin eksekusi di pustaka bersama jika tidak, temukan-debuginfo.sh lewati pemrosesan.
Domen Vrankar

20

Objek bersama yang tidak dapat dieksekusi berfungsi dengan baik, tetapi pustaka yang ditandai dapat dieksekusi juga dapat dijalankan sebagai program mandiri.

Jadi, apa gunanya mengatur x ini?

Tidak ada, kecuali Anda ingin mereka mengeluarkan versi atau info lainnya

Haruskah semua pembuat paket perpustakaan melakukan itu?

Tidak

Apa yang akan terjadi jika saya dlopen () perpustakaan bersama yang memiliki izin 0644?

Anda akan mendapatkan pegangan objek bersama yang baru (selama file dapat dibaca dll.) ... bit exec tidak memengaruhi ini


Seperti mengapa perpustakaan yang tidak dapat digunakan sebagai executable mandiri masih memiliki set bit exec: ini mungkin hanya sebuah artefak dari sistem build atau skrip tautan yang digunakan.


contoh output, hanya untuk referensi:

$ /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
Kebanyakan perpustakaan .so hanya segfault karena mereka tidak memiliki apa pun yang menyerupai main()titik masuk normal . Libc adalah outlier. Pengembangnya melakukan catatan ini sebagai fungsi tambahan. Sederhana chmod a+xdari perpustakaan lain mana pun tidak akan memberi Anda fungsi ini` Saya masih tidak melihat titik pengaturan +xuntuk semua perpustakaan.
Tadeusz A. Kadłubowski

Setuju, dan mungkin hanya .soyang bisa dieksekusi yang harus ditandai seperti itu. Saya akan mengubah jawaban saya untuk menghindari menyiratkan bahwa segala sesuatu dengan set bit exec benar-benar executable mandiri.
berguna

5
Perintah "ldd" biasanya berupa skrip sh yang memanggil tautan dinamis, ld-linux-x86-64.so.2, atau /lib/ld-linux.so.2 atau semacamnya. Linker dinamis selalu merupakan objek yang dibagikan.
Bruce Ediger
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.