sudo 和 root 之间 ldd 的输出不同

sudo 和 root 之间 ldd 的输出不同

ldd /usr/bin/openssl在我的系统上,普通用户、root 和 sudo 的输出有所不同。

这是普通用户的输出:

$ whoami
myname
$ ldd /usr/bin/openssl
    linux-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 进入 root 的输出:

$ sudo whoami
root
$ sudo ldd /usr/bin/openssl
    linux-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)

这是 root 的输出:

$ sudo su
$ whoami
root
$ ldd /usr/bin/openssl
    linux-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 进入用户的输出bind9

$ sudo -u bind whoami
bind
$ sudo -u bind ldd /usr/bin/openssl
    linux-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 产生与普通用户和 root 相同的结果。我该怎么做?

LD_LIBRARY_PATH在环境之间并不相同,但我不知道如何使值相同。

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

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

$

我相信这个问题的答案将解决这个与绑定相关的问题

答案1

事实证明,问题在于我安装了某些库的两个不同版本,这导致 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 的评论。

相关内容