LD_LIBRARY_PATH ekran tarafından ayarlanmadı


13

screenBash içinde çalıştırmak LD_LIBRARY_PATH değişkenini siler. Biraz okuma yaptım ve bu beklenen davranış gibi görünüyor, ama etrafta dolaşmam gerekiyor.

Çözüm, LD_LIBRARY_PATH bildirimini ekliyor ~/.bashrc. Benim durumumda, LD_LIBRARY_PATH kabuğun başlatılması ve ekranı çağırdığımda çok değişti, bu yüzden geçerli LD_LIBRARY_PATH değerini screenoturuma almam gerekiyor .


ekranından önce LD_KLIBRARY_PATH dışa aktarma işleminiz var mı?
19:56, kinnou02

Süper kullanıcı sorusu.
14'te karlphillip

Maalesef, bir şekilde üstesinden gelebilir miyim yoksa silmeli ve yeniden mi göndermeliyim?

Beş yakın oy alırsanız, bu oyuna otomatik olarak çarpılacaktır. Gitmek için bir tane daha!
Thomas

Yanıtlar:


14

screenortam değişkenini tanımlamıyor; Linux tarafından kaldırılır.

Çoğu sistemde, /usr/bin/screenyürütülebilir dosya, veritabanını değiştirebilmek için grup için setgid bitiyle birlikte yüklenir . Ayrıca , soket dizinine ( ) erişimi kontrol etmek için setgid kullanır .utmputmp/var/run/screen/

Linux'ta, bir setuid (veya setgid ) programı çalıştırıldığında, olası saldırı noktalarını azaltmak için belirli ortam değişkenlerini ( LD_LIBRARY_PATHdiğer bazı değişkenler dahil LD_*ve HOSTALIASES) almaz : Aksi takdirde küçük bir kütüphane yazabilir suveya sudo"gelişmiş" işlevlerinizi bu şekilde çağırmak.


Setgid bitini buradan kaldırabilirsiniz screen, ancak soket dizinini herkes tarafından tamamen erişilebilir hale getirmeniz gerekir (mod 0777). Bununla birlikte, bir güvenlik riski olmamalı ve screenayrıca bağdaştırıcının UID'sini de kontrol etmelidir .

Ancak, gereken değil yapmak utmpveritabanı dünya çapında yazma.


(Not: Ortam değişkenlerinin çekirdek tarafından mı, yoksa ld-linux.so tarafından mı yoksa glibc çalışma zamanı tarafından mı kaldırıldığından emin değilim.)
user1686

Gerçekten iyi çalıştı. Bunlar yapılması gereken komutlardır: chgrp root $(which screen)ve chmod 777 /var/run/screen. Bu küçük bash betiği ile test edebilirsiniz: while true; do echo $LD_LIBRARY_PATH; sleep 2; done Yolun başarıyla görüntülendiğini göreceksiniz. Teşekkürler grawity.
lepe

7

Gözlerinde farklı .screenrckullanabileceğiniz setenvekranın ortamında bir değer ayarlamak için komut.

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

Bu, kabuğunuz başlamadan önce ayarlanır. Açıkçası LD_LIBRARY_PATH_SCREENEkrana başlamadan önce ayarlanması gerekir.


1
Grawity'nin cevabına bakınız - LD_LIBRARY_PATH bu bağlamda özel bir değişkendir. Bu işe yarasa bile (setenv '=', btw'ye ihtiyaç duymaz) ayarlamaya çalıştığımız ortam değişkenini yeniden adlandırmak çok yararlı olmaz; programlar hala kanonik isme bakmaktadır (bkz. stackoverflow.com/questions/13974069/… ).
Andrew Wood

Düzeltme için. Sözdizimini düzelttim ve ortam başlangıç ​​ekranında farklı bir değişkenim olduğunu unuttum. _SCREENKimse rc dosyasında veya ekrana başlayan bir sarıcı komut ayarlanabilir.
Droj

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.