화면에서 LD_LIBRARY_PATH 설정 해제


13

screenbash에서 실행 하면 변수 LD_LIBRARY_PATH가 지워집니다. 나는 약간의 독서를했고 이것이 예상되는 것처럼 보이지만 나는 그 주위를 돌아봐야합니다.

해결 방법은 LD_LIBRARY_PATH 선언을에 추가하는 것 ~/.bashrc입니다. 필자의 경우 LD_LIBRARY_PATH는 셸 시작과 화면을 호출 할 때마다 많이 변경되므로 LD_LIBRARY_PATH 의 현재 값을 screen세션 으로 가져와야합니다 .


화면을 실행하기 전에 LD_KLIBRARY_PATH를 내보냈습니까?
kinnou02

수퍼 유저 질문.
karlphillip

죄송합니다. 어떻게해서 이동하거나 삭제하고 다시 게시해야하나요?

5 번의 찬성표를 받으면 자동으로 부딪칩니다. 하나 더 가자!
Thomas

답변:


14

screen환경 변수를 설정 해제하지 않습니다. 리눅스 자체에 의해 제거된다.

대부분의 시스템에서 /usr/bin/screen실행 파일은 데이터베이스 를 수정할 수 있도록 그룹 용 setgid 비트 와 함께 설치 됩니다. 또한 setgid 를 사용 하여 소켓 디렉토리 ( )에 대한 액세스를 제어합니다 .utmputmp/var/run/screen/

리눅스, A의 setuid를 (또는 setgid를 ) 프로그램이 실행 된 것입니다 그것은 특정 환경 변수 수신 (포함하지 않는 LD_LIBRARY_PATH몇 가지 다른 LD_*변수를하고, HOSTALIASES그렇지 않으면 당신은 작은 도서관과 트릭을 작성할 수), 가능한 공격 지점을 줄이기 위해 su또는 sudo그런 식으로 "향상된"기능을 호출합니다.


에서 setgid 비트를 제거 할 수 screen있지만 모든 사람이 소켓 디렉토리에 완전히 액세스 할 수 있도록해야합니다 (모드 0777). 그러나 부착 screen자의 UID 자체도 검사하므로 보안 위험이 없어야 합니다.

그러나, 당신은해야 하지utmp데이터베이스가 세계 쓰기.


(참고 : 환경 변수가 커널, ld-linux.so 또는 glibc 런타임에 의해 제거되는지 확실하지 않습니다.)
user1686

정말 잘 작동했습니다. 수행해야하는 명령은 다음 chgrp root $(which screen)과 같습니다 chmod 777 /var/run/screen. 이 작은 bash 스크립트로 테스트 할 수 있습니다 while true; do echo $LD_LIBRARY_PATH; sleep 2; done . 경로가 성공적으로 표시됩니다. 고마워요
lepe December

7

당신의에서 .screenrc, 당신은 사용할 수있는 setenv화면의 환경에 값을 설정하는 명령을 사용합니다.

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

이것은 쉘이 시작되기 전에 설정됩니다. 물론 LD_LIBRARY_PATH_SCREEN당신이 화면을 시작하기 전에 설정해야합니다.


1
grawity의 답변을 참조하십시오-LD_LIBRARY_PATH는이 맥락에서 특별한 변수입니다. 이것이 효과가 있었더라도 (setenv가 '=', btw 일 필요는 없음) 설정하려는 환경 변수의 이름을 바꾸는 데 큰 도움이되지 않습니다. 프로그램은 여전히 ​​표준 이름을보고있을 것입니다 ( stackoverflow.com/questions/13974069/… 참조 ).
앤드류 우드

수정보다. 구문을 수정하고 환경 시작 화면에 다른 변수가 있다는 것을 잊었습니다. _SCREEN하나는 당신의 rc 파일 또는 화면을 시작하는 래퍼 스크립트에서 설정할 수 있습니다.
Droj

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.