
在我之前的問題中,執行“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
沒有權限,我也可以從終端使用建立一個空的可執行檔?
謝謝
答案1
while IFS= read -d '' -r line; do
printf "%s\0" "$line"
done > executable-file < /lib64/ld-2.17.so
僅使用 shell 內建函數,因此不需要啟動新進程。復原場景假設您已經有一個正在執行的 shell;因為它已經在運行,所以它在磁碟上的權限及其庫的權限不再重要。
在這種情況下,您將無法啟動新的 shell,但目前正在執行的任何內容都不會受到變更的權限的影響。
如果您嘗試讀取的檔案有不權限,只有當您處於 root shell 中時才有效;否則重定向ld-2.17.so
將會失敗,因為除非您是 root,否則無法讀取不可讀的檔案。 (我在這裡忽略 SELinux 等。)