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 的评论。