
Na minha pergunta anterior,executei "chmod 666 ld-2.17.so" - como posso recuperar?Perguntei se altero ld-2.17.so
a permissão de leitura, como posso recuperá-la, já que não me permitirá executar nada que requeira essas bibliotecas?
E obtive a resposta da seguinte forma,
Se você tiver um arquivo executável no qual possa gravar, poderá copiar o conteúdo de ld.so para esse arquivo usando a leitura do bash:
while IFS= read -d '' -r line; do printf "%s\0" "$line"; done > executable-file < /lib64/ld-2.17.so
Eu tentei e funcionou. Mas o que estou confuso é por que esse while
loop funciona se /bin/bash
requer lib64/ld-2.17.so
biblioteca, 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 bash
o código funcionou no terminal sem o /lib64/ld-2.17.so
? Isso também significa que também posso criar um arquivo executável vazio usando bash
o terminal, mesmo que /lib64/ld-2.17.so
não tenha permissões?
Obrigado
Responder1
while IFS= read -d '' -r line; do
printf "%s\0" "$line"
done > executable-file < /lib64/ld-2.17.so
usa apenas shell integrados, portanto 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 no disco e as de suas bibliotecas não importam mais.
Você não seria capaz de iniciar um novo shell nessas circunstâncias, mas nada em execução no momento é afetado pelas permissões alteradas.
Se o arquivo que você está tentando ler tivernãopermissões, isso só funcionará se você estiver em um shell root; caso contrário, o redirecionamento ld-2.17.so
falhará, pois você não poderá ler um arquivo ilegível, a menos que seja root. (Estou ignorando o SELinux etc. aqui.)