por que while loop funciona do terminal se ld-2.17.so não possui permissão executável?

2

Na minha pergunta anterior, executado "chmod 666 ld-2.17.so" - como eu posso recuperar? Eu perguntei se eu mudei ld-2.17.so permissão para ler, como posso recuperá-lo de volta, uma vez que não me permitirá executar qualquer coisa em tudo o que requer essas bibliotecas?

E recebi a resposta da seguinte forma,

If you have an executable file you can write to, you could copy the contents of ld.so to that file using bash's read:

while IFS= read -d '' -r line; do printf "%s%bl0ck_qu0te%" "$line"; done > executable-file < /lib64/ld-2.17.so

Eu tentei e funcionou. Mas o que me deixa confuso é por que esse while loop funciona se /bin/bash em si exigir lib64/ld-2.17.so library, como pode ser visto a seguir,

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)

Alguém pode me dizer por que o bash code funcionou do terminal sem o /lib64/ld-2.17.so ? Isso também significa que eu também posso criar um arquivo executável vazio usando bash do terminal mesmo se /lib64/ld-2.17.so não tiver permissões?

Obrigado

    
por MaverickD 29.08.2018 / 08:09

1 resposta

4
while IFS= read -d '' -r line; do 
    printf "%s
while IFS= read -d '' -r line; do 
    printf "%s%pre%" "$line"
done > executable-file < /lib64/ld-2.17.so
" "$line" done > executable-file < /lib64/ld-2.17.so

usa somente os recursos internos do shell, por isso não precisa iniciar novos processos. O cenário de recuperação pressupõe que você já tenha um shell em execução; como já está em execução, suas permissões em disco e as de suas bibliotecas não importam mais.

Você não poderá iniciar um novo shell nessas circunstâncias, mas nada que esteja em execução no momento é afetado pelas permissões alteradas.

Se o arquivo do qual você está tentando ler não tiver permissões não , isso só funcionará se você estiver em um shell raiz; caso contrário, o redirecionamento de ld-2.17.so falhará, pois você não poderá ler um arquivo ilegível, a menos que esteja root. (Eu estou ignorando o SELinux etc. aqui.)

    
por 29.08.2018 / 08:21

Tags