Tidak dapat menetapkan shell DYLD_FALLBACK_LIBRARY_PATH di OSX 10.11.1

11

Dalam skrip shell yang digunakan untuk pengujian unit dengan pustaka dinamis dalam direktori selain dari @rpath biasa, saya sebelumnya telah dapat mengatur DYLD_FALLBACK_LIBRARY_PATH untuk mengatur direktori yang berisi pustaka. Di bawah 10.11.1, bash tampaknya mengabaikan upaya untuk mengatur variabel lingkungan ini:

$ sh -x testscript.sh
+ DYLD_FALLBACK_LIBRARY_PATH=/Users/something/testinglibs
+ export DYLD_FALLBACK_LIBRARY_PATH
+ exec printenv

dan DYLD_FALLBACK_LIBRARY_PATH tidak ada dalam output printenv.

Apakah ini peretasan terkait keamanan di shell 10.11? Saya belum dapat menemukan perubahan ini didokumentasikan di halaman manual atau online.

Orang
sumber
Apakah bantuan install_name_tool ?
Saaru Lindestøkke
Tentu, install_name_tool adalah solusi permanen (dan saya sebenarnya telah menuliskannya untuk mengatur lingkungan build). Untuk pengujian cepat dan debugging di lingkungan pengembangan, itu adalah kerumitan harus membuat salinan perpustakaan sementara, meretas perubahan @rpath, dan kemudian mungkin lupa tentang perubahan manual. DYLD_FALLBACK_LIBRARY_PATH dan DYLD_LIBRARY_PATH berguna untuk siklus dev / tes sesekali ini.
Guy

Jawaban:

8

Ini adalah Perlindungan Integritas Sistem yang diperkenalkan di El Capitan

Dokumentasi dalam hal ini dari Apple

Pada dasarnya setiap executable OS X yang disediakan Apple dilindungi. dan (dari dokumen sebelumnya)

Menelurkan anak proses proses dibatasi oleh Perlindungan Integritas Sistem, seperti dengan meluncurkan proses pembantu dalam bundel dengan NSTask atau memanggil perintah exec (2), mengatur ulang port khusus Mach proses anak itu. Variabel lingkungan penghubung dinamis apa saja, seperti DYLD_LIBRARY_PATH, dihapus saat meluncurkan proses yang dilindungi.

Dalam hal ini sh dilindungi

pengguna151019
sumber
Terima kasih untuk penunjuknya! Saya telah fokus pada perlindungan kernel dan sistem file lainnya di SIP. Tidak memperhatikan perubahan ini.
Guy
2
Ok, ini menjelaskan asal usul fenomena ini, tetapi bagaimana kita sekarang menguji perpustakaan yang tidak diinstal? Maksud saya, bagaimana kita bisa menulis make checkdi El Capitan ketika lib bersama dibutuhkan?
akim
Sebagian besar make via autoconf harus berakhir di / usr / local yang masih dapat ditulisi - jika mereka mencoba untuk tempat lain di bawah / usr saya akan mempertanyakan pengetahuan penulis tentang OS X (atau Unix)
user151019
Jika ada yang menemukan ini setelah membuang waktu mencoba memahami mengapa var lingkungan dyld menghilang, pertimbangkan mengajukan bug dengan Apple untuk membuat mereka mendokumentasikan interaksi dyld / SIP. Saya sudah melakukannya, dan bug mendapat nomor rdar: // 30755019. (Saya berharap bahwa mereka kemudian akan berpikir untuk mendokumentasikan perangkap seperti lainnya ...)
hmijail berduka
1
(Maksud saya mendokumentasikan interaksi SIP di halaman dyld, yang pada tulisan ini benar-benar bungkam tentang hal itu)
hmijail meratapi orang-orang yang mengundurkan diri