Score:0

ผลลัพธ์ที่แตกต่างกันสำหรับ ldd ระหว่าง sudo และ root

ธง cn
pfo

ในระบบของฉัน เอาต์พุตสำหรับ ldd /usr/bin/openssl ความแตกต่างระหว่างผู้ใช้ทั่วไป root และ sudo

นี่คือผลลัพธ์สำหรับผู้ใช้ทั่วไป:

$ใครอะ
ชื่อของฉัน
$ldd /usr/bin/openssl
    ลินุกซ์ vdso.so.1 (0x00007fff5bdd0000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f609a783000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f609a4a8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f609a271000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f609a8db000)

นี่คือผลลัพธ์สำหรับผู้ใช้ทั่วไป sudo-ing เข้าสู่รูท:

$ sudo whoami
ราก
$ sudo ldd /usr/bin/openssl
    ลินุกซ์ vdso.so.1 (0x00007ffc5d75a000)
    libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f4092062000)
    libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f4091ba6000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f409197e000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4091979000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4091974000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f40923bc000)

นี่คือผลลัพธ์สำหรับรูท:

$ sudo ซู
$ใครอะ
ราก
$ldd /usr/bin/openssl
    ลินุกซ์ vdso.so.1 (0x00007ffcccffe000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f4915593000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f49152b8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4915081000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f49156eb000)

นี่คือผลลัพธ์สำหรับผู้ใช้ทั่วไป sudo-ing ใน ผูก 9 ผู้ใช้:

$ sudo -u ผูก whoami
ผูก
$ sudo -u ผูก ldd /usr/bin/openssl
    ลินุกซ์ vdso.so.1 (0x00007ffdcabb2000)
    libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f53973d4000)
    libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f5396f18000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5396cf0000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5396ceb000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5396ce6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f539772e000)

ฉันต้องการให้ sudo ให้ผลลัพธ์เดียวกันกับที่ผู้ใช้ทั่วไปและรูทมีอยู่แล้ว ฉันจะทำสิ่งนี้ได้อย่างไร

LD_LIBRARY_PATH ไม่เหมือนกันในสภาพแวดล้อม แต่ฉันไม่รู้วิธีทำให้ค่าเหมือนกัน

$ echo $LD_LIBRARY_PATH
/usr/lib/x86_64-linux-gnu
$
$ sudo bash -c 'echo $LD_LIBRARY_PATH'

$
$ sudo ซู
$ echo $LD_LIBRARY_PATH
/usr/lib/x86_64-linux-gnu
$
$ sudo -u ผูก bash -c 'echo $LD_LIBRARY_PATH'

$

ผมเชื่อว่าคำตอบนี้จะคลี่คลาย คำถามที่เกี่ยวข้องกับการผูกนี้.

waltinator avatar
it flag
อ่าน `man ldconfig` ตัวแปรสภาพแวดล้อม `LD_LIBRARY_PATH` อาจแตกต่างกันไปในแต่ละสภาพแวดล้อม
pfo avatar
cn flag
pfo
@waltinator: ขอบคุณสำหรับความคิดเห็นของคุณ `LD_LIBRARY_PATH` จริง ๆ แล้วเหมือนกันในสภาพแวดล้อมต่าง ๆ ฉันได้เพิ่มผลลัพธ์ให้กับคำถาม
Tilman avatar
cn flag
คำสั่ง `sudo echo $LD_LIBRARY_PATH` ไม่ได้ทำในสิ่งที่คุณคิดมันส่งออกค่าของ `LD_LIBRARY_PATH` *outside* `sudo` เนื่องจากเชลล์ทำการแทนที่ตัวแปรก่อนที่จะรันคำสั่ง `sudo` ลองบางอย่างเช่น `sudo bash -c 'echo $LD_LIBRARY_PATH'`
waltinator avatar
it flag
คุณไม่ได้ตรวจสอบ `$LD_LIBRARY_PATH` ในสภาพแวดล้อมที่แตกต่างกัน ทุกครั้งที่คุณพิมพ์ "`$LD_LIBRARY_PATH`" (ยกเว้นกรณี `sudo su`) จะถูกกรอกจากสภาพแวดล้อมปัจจุบันของคุณ ก่อนดำเนินการคำสั่ง ทำให้มันเกิดขึ้นโดยใส่ `echo ` ไว้ข้างหน้า 1-liners ของคุณ `bash` ประเมินตัวแปรสภาพแวดล้อมตั้งแต่เนิ่นๆ หลีกเลี่ยง `$` โดยใส่แบ็กสแลช ("`\ `") ก่อนเพื่อชะลอการประเมิน เช่น `sudo echo \$LD_LIBRARY_PATH`
pfo avatar
cn flag
pfo
ขอบคุณทั้งสองคน! คุณพูดถูก ค่าต่างกันแน่นอน `sudo bash -c 'echo $LD_LIBRARY_PATH'` ให้บรรทัดว่าง คำถามต่อไปของฉันคือฉันจะแก้ไขได้อย่างไร ฉันลอง `sudo bash -c 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu'` แต่แน่นอนว่าไม่ได้เก็บค่าไว้และ `sudo bash -c 'echo $LD_LIBRARY_PATH'` ให้บรรทัดว่างอีกครั้ง
Tilman avatar
cn flag
คุณสามารถลองใส่คำสั่ง `export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu` ลงในไฟล์ `.bashrc` ของผู้ใช้ `bind` แต่ฉันสงสัยว่าช่องทางนี้จะนำคุณไปในทิศทางที่ถูกต้อง ดูเหมือนว่าคุณได้ติดตั้ง `libssl.so.1.1` ไว้สองเวอร์ชัน เวอร์ชันหนึ่งอยู่ใน `/lib/x86_64-linux-gnu` และอีกเวอร์ชันหนึ่งอยู่ใน `/usr/lib/x86_64-linux-gnu` นั่นย่อมก่อให้เกิดปัญหาตามมา ลองแก้ไขแทน ค้นหาว่าอันไหนถูกต้องและเสียอันที่เกินมา
pfo avatar
cn flag
pfo
@Tilman ขอบคุณ! ฉันสามารถเรียกใช้ `rm /lib/x86_64-linux-gnu/libssl.so.1.1` ได้หรือไม่ หรือมีวิธีที่ "ปลอดภัยกว่า" ในการทำเช่นนี้หรือไม่ ฉันกลัวที่จะลงเอยด้วยสถานะที่ไม่ลงรอยกัน (อื่นๆ)
Tilman avatar
cn flag
วิธีที่ปลอดภัยที่สุดคือการค้นหาว่าเวอร์ชันพิเศษมาจากไหน และขึ้นอยู่กับผลลัพธ์ที่จะตัดสินใจว่ายังจำเป็นต้องใช้หรือไม่ ตัวอย่างเช่น หากติดตั้งเป็นส่วนหนึ่งของแพ็คเกจซอฟต์แวร์ของบุคคลที่สาม คุณอาจต้องการเก็บสำเนาสำรองไว้จนกว่าคุณจะยืนยันว่าแพ็คเกจนั้นใช้งานได้กับเวอร์ชันใน `/usr/lib/x86_64-linux-gnu`
Score:0
ธง cn
pfo

ปรากฎว่าปัญหาคือฉันติดตั้งไลบรารีบางเวอร์ชันที่แตกต่างกันสองเวอร์ชัน ซึ่งทำให้ OpenSSL ทำงานแตกต่างกันขึ้นอยู่กับว่าผู้ใช้ใช้ sudo หรือไม่

การลบไลบรารีเหล่านั้นและเรียกใช้ ldconfig หลังจากนั้นก็แก้ปัญหาให้ฉัน:

sudo rm /lib/x86_64-linux-gnu/libssl.so.1.1
sudo rm /lib/x86_64-linux-gnu/libcrypto.so.1.1
sudo ldconfig

ขอบคุณ @waltinator และ @Tilman สำหรับความคิดเห็นของพวกเขา

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา