LD_LIBRARY_PATH ยกเลิกการตั้งค่าตามหน้าจอ


13

การทำงานscreenใน bash จะทำความสะอาดตัวแปร LD_LIBRARY_PATH ฉันอ่านหนังสือเสร็จแล้วและดูเหมือนว่านี่เป็นพฤติกรรมที่คาดหวัง แต่ฉันต้องหลีกเลี่ยง

วิธีแก้ปัญหาคือการเพิ่มการประกาศ LD_LIBRARY_PATH ~/.bashrcไป ในกรณีของฉัน LD_LIBRARY_PATH ได้รับการเปลี่ยนแปลงมากมายระหว่างการเปิดตัวเชลล์และเมื่อฉันเรียกใช้หน้าจอดังนั้นฉันต้องได้รับค่าปัจจุบันของ LD_LIBRARY_PATH ในscreenเซสชัน


คุณมีการส่งออก LD_KLIBRARY_PATH ก่อนเรียกใช้หน้าจอหรือไม่
kinnou02

คำถามยอดเยี่ยม
karlphillip

ขออภัยฉันสามารถย้ายไปมาได้หรือฉันควรลบและโพสต์ใหม่?

หากคุณได้รับคะแนนโหวตห้าครั้งมันจะถูกชนโดยอัตโนมัติ อีกต่อไป!
โทมัส

คำตอบ:


14

screenไม่ได้ล้างตัวแปรสภาพแวดล้อม มันถูกลบโดย Linux เอง

ในระบบส่วนใหญ่/usr/bin/screenปฏิบัติการถูกติดตั้งด้วยบิตsetgidสำหรับutmpกลุ่มเพื่อให้สามารถปรับเปลี่ยนutmpฐานข้อมูล นอกจากนี้ยังใช้setgidเพื่อควบคุมการเข้าถึงไดเรกทอรีซ็อกเก็ต ( /var/run/screen/)

บน Linux เมื่อรันโปรแกรม setuid (หรือsetgid ) จะไม่ได้รับตัวแปรสภาพแวดล้อมบางอย่าง (รวมถึงตัวแปรLD_LIBRARY_PATHอื่น ๆ อีกหลายLD_*ตัวและHOSTALIASES) เพื่อลดจุดโจมตีที่เป็นไปได้: มิฉะนั้นคุณสามารถเขียนไลบรารี่ขนาดเล็กและกลอุบายsuหรือsudoเป็นการเรียกฟังก์ชั่น "ปรับปรุง" ของคุณในแบบนั้น


คุณสามารถลบบิตsetgidออกscreenได้ แต่คุณจะต้องทำให้ทุกคนเข้าถึงไดเรกทอรีซ็อกเก็ตได้อย่างเต็มที่ (โหมด 0777) ไม่ควรมีความเสี่ยงด้านความปลอดภัยเนื่องจากscreenตรวจสอบ UID ของอุปกรณ์แนบด้วย

อย่างไรก็ตามคุณไม่ควรทำให้utmpฐานข้อมูลสามารถเขียนได้ทั่วโลก


(หมายเหตุ: ฉันไม่แน่ใจว่าตัวแปรสภาพแวดล้อมจะถูกลบออกโดยเคอร์เนลหรือโดย ld-linux.so หรือโดย glibc runtime)
user1686

ทำงานได้ดีจริงๆ เหล่านี้เป็นคำสั่งที่ต้องทำ: และchgrp root $(which screen) chmod 777 /var/run/screenคุณสามารถทดสอบกับสคริปต์ทุบตีเล็ก ๆ นี้: while true; do echo $LD_LIBRARY_PATH; sleep 2; done คุณจะเห็นว่าเส้นทางนั้นแสดงผลสำเร็จ ขอบคุณ grawity
lepe

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/… )
Andrew Wood

กว่าสำหรับการแก้ไข ฉันแก้ไขไวยากรณ์และลืมว่าฉันมีตัวแปรที่แตกต่างกันในหน้าจอเริ่มต้นของสภาพแวดล้อม _SCREENหนึ่งสามารถตั้งค่าในแฟ้ม rc ของคุณหรือในสคริปต์เสื้อคลุมที่เริ่มต้นหน้าจอ
Droj

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.