在我之前的问题中,执行了“chmod 666 ld-2.17.so”——我该如何恢复?我问我是否更改ld-2.17.so
读取权限,我怎样才能恢复它,因为它不允许我执行任何需要这些库的东西?
我得到的答案如下,
如果你有一个可以写入的可执行文件,你可以使用 bash 的读取将 ld.so 的内容复制到该文件:
while IFS= read -d '' -r line; do printf "%s\0" "$line"; done > executable-file < /lib64/ld-2.17.so
我试过了,它奏效了。但我感到困惑的是,while
如果这个循环/bin/bash
本身需要lib64/ld-2.17.so
库,为什么它会起作用,如下所示,
ldd /bin/bash
linux-vdso.so.1 => (0x00007ffc54dee000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f6fb9bbe000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f6fb99ba000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6fb95f6000)
/lib64/ld-linux-x86-64.so.2 (0x000055ec142f5000)
有人可以告诉我为什么bash
代码在没有的情况下从终端运行/lib64/ld-2.17.so
吗?这是否也意味着bash
即使/lib64/ld-2.17.so
没有权限,我也可以使用 from terminal 创建一个空的可执行文件?
谢谢
仅使用 shell 内置函数,因此不需要启动新进程。恢复场景假定您已经有一个 shell 正在运行;因为它已经在运行,它在磁盘上的权限和它的库的权限不再重要。
在这些情况下您将无法启动新的 shell,但当前正在运行的任何内容都不会受到更改的权限的影响。
如果您尝试读取的文件没有权限,那么这仅在您处于 root shell 中时才有效;否则重定向
ld-2.17.so
将会失败,因为除非你是 root,否则你无法读取不可读的文件。(我在这里忽略了 SELinux 等。)