почему цикл while работает из терминала, если у ld-2.17.so нет прав на исполнение?

почему цикл while работает из терминала, если у ld-2.17.so нет прав на исполнение?

В моем предыдущем вопросе:выполнил «chmod 666 ld-2.17.so» — как восстановить?Я спросил, если я изменю ld-2.17.soразрешение на чтение, как я смогу восстановить его обратно, поскольку оно не позволит мне выполнить вообще ничего, что требует этих библиотек?

И я получил следующий ответ:

Если у вас есть исполняемый файл, в который можно производить запись, вы можете скопировать содержимое ld.so в этот файл с помощью команды bash read:

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

использует только встроенные функции оболочки, поэтому не нужно запускать новые процессы. Сценарий восстановления предполагает, что у вас уже есть запущенная оболочка; поскольку она уже запущена, ее разрешения на диске и разрешения ее библиотек больше не имеют значения.

При таких обстоятельствах вы не сможете запустить новую оболочку, но ни на что из запущенного в данный момент процесса измененные разрешения не повлияют.

Если файл, который вы пытаетесь прочитать, имеетнетразрешения, это сработает только если вы находитесь в оболочке root; в противном случае перенаправление ld-2.17.soне удастся, поскольку вы не сможете прочитать нечитаемый файл, если вы не являетесь пользователем root. (Я игнорирую здесь SELinux и т. п.)

Связанный контент