LD_LIBRARY_PATH rozbrojony przez screen

13

Uruchomienie screenw bash powoduje wyczyszczenie zmiennej LD_LIBRARY_PATH. Przeczytałem trochę i wydaje się, że jest to oczekiwane zachowanie, ale muszę to obejść.

Obejściem tego problemu jest dodanie deklaracji LD_LIBRARY_PATH do ~/.bashrc. W moim przypadku zmienna LD_LIBRARY_PATH bardzo się zmienia między uruchomieniem powłoki a wywołaniem screena, więc muszę pobrać bieżącą wartość LD_LIBRARY_PATH do screensesji.

Andrew Wood
źródło
wyeksportowałeś LD_KLIBRARY_PATH przed uruchomieniem ekranu?
kinnou02,
Pytanie superużytkownika.
karlphillip
Przepraszam, czy mogę jakoś to przenieść, czy powinienem usunąć i opublikować ponownie?
Jeśli zdobędziesz pięć bliskich głosów, zostanie tam automatycznie uderzony. Jeszcze jedno!
Thomas

Odpowiedzi:

14

screennie wyłącza zmiennej środowiskowej; jest usuwany przez sam Linux.

W większości systemów /usr/bin/screenplik wykonywalny jest instalowany z bitem setgid dla utmpgrupy, aby móc modyfikować utmpbazę danych. Używa również setgid do kontrolowania dostępu do katalogu socket ( /var/run/screen/).

W systemie Linux, gdy uruchamiany jest program setuid (lub setgid ), nie otrzymuje pewnych zmiennych środowiskowych (w tym LD_LIBRARY_PATHkilku innych LD_*zmiennych i HOSTALIASES), w celu zmniejszenia możliwych punktów ataku: W przeciwnym razie możesz napisać małą bibliotekę i podstęp sulub sudodo wywoływania w ten sposób swoich „ulepszonych” funkcji.


Możesz usunąć bit setgidscreen , ale będziesz musiał uczynić katalog gniazd całkowicie dostępnym dla wszystkich (tryb 0777). Nie powinno to jednak stanowić zagrożenia dla bezpieczeństwa, ponieważ screensprawdza również sam identyfikator UID administratora.

Nie należy jednak nadawać tej utmpbazie danych możliwości zapisu na całym świecie.

użytkownik1686
źródło
(Uwaga: nie jestem pewien, czy zmienne środowiskowe są usuwane przez jądro, czy przez ld-linux.so, czy przez środowisko
uruchomieniowe
Działało naprawdę dobrze. Oto polecenia, które należy wykonać: chgrp root $(which screen)i chmod 777 /var/run/screen. Możesz przetestować za pomocą tego małego skryptu bash: while true; do echo $LD_LIBRARY_PATH; sleep 2; done zobaczysz, że ścieżka została pomyślnie wyświetlona. Dzięki grawitacji.
lepe
7

W twoim .screenrcmożesz użyć setenvpolecenia, aby ustawić wartość w środowisku ekranu.

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

Jest to ustawiane przed uruchomieniem powłoki. Oczywiście LD_LIBRARY_PATH_SCREENnależy ustawić przed uruchomieniem ekranu.

Droj
źródło
1
Zobacz odpowiedź grawity - LD_LIBRARY_PATH jest specjalną zmienną w tym kontekście. Nawet jeśli to zadziałało (setenv nie musi „=”, btw), nie byłoby bardzo pomocne zmienić nazwę zmiennej środowiskowej, którą próbujemy ustawić; programy nadal szukałyby nazwy kanonicznej (patrz stackoverflow.com/questions/13974069/… ).
Andrew Wood,
Niż za korektę. Poprawiłem składnię i zapomniałem, że mam inną zmienną na ekranie startowym środowiska. Ten _SCREENmożna ustawić w pliku rc lub w skrypcie opakowującym, który uruchamia ekran.
Droj
1

Spróbuj exportinteresującej Cię zmiennej środowiskowej.

export LD_LIBRARY_PATH
Benjamin Bannier
źródło