/ bin / etc / lib64 / root / sbin excluído ou movido pela pasta mv / * / * while su

11

O SO é Centos 6.5 de 64 bits

Eu baixei um arquivo tar e queria descompactá- mvlo.

Descompactei e, acidentalmente (como root), executei em mv folder/* /*vez do mv folder/* .bash, disse que não podia sobrescrever alguns arquivos e pedi permissão para outros. Ctrl-c fora.

Deixei a sessão do terminal aberta, mas saí su.

Agora eu perdi o acesso à maioria dos shellcomandos, não consigo lsnenhum diretório e não consigo voltar su.

O servidor da web e os serviços ainda parecem estar em execução. Eu posso correr muito poucos comandos, cdé um deles e quando tento cdpara /etcou /binele erros com no directory found.

EDIT Só notei todas as pastas que faltam /( bin, etc, lib64, root, sbin) foram transferidos para /vardiretório, eu tentei /var/bin/sue obter: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

webaholik
fonte
1
Você não pode correr /var/bin/sudiretamente?
precisa saber é o seguinte
Por favor, não edite a pergunta com soluções. Na rede de troca de pilhas, você prefere adicionar uma resposta, deixe um comentário em uma resposta existente para melhorar uma resposta.
21414 Bernhard
@Darkhogg /var/bin/su: user root does not existEu acho que nós determinamos que não pode ser feito porque / etc é em / var / etc
webaholik
@Bernhard tentou correta
webaholik

Respostas:

22

Se o seu sistema estiver busyboxinstalado, você poderá usá-lo para devolver as coisas.

busyboxé um binário com muitos utilitários padrão embutidos nele. As coisas tais como mv, sh, ls, etc.

Do seu comentário sobre a resposta de Pavel, parece que tudo acabou /var. Você pode tentar fazer /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Isso deve tornar a maior parte do seu sistema operacional novamente. Existem alguns diretórios, como os /tmpque também existem /var/tmp, então você não pode simplesmente movê-los. Espero que tenham sido os que mvreclamaram e foram deixados em paz.

 

Obtendo um shell raiz

Você também mencionou que perdeu o shell raiz e isso suestá causando um ld-linuxerro de biblioteca. Você pode usar o seguinte:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Nota: Ao tentar isso, ele não funciona. Isso ocorre porque surequer vários arquivos /etc( passwd, pam.de outros). Se /etcainda estivesse intacto, isso teria uma boa chance de sucesso.

 

Sem ocupado

Se você não tiver o busybox disponível, poderá usar o mesmo truque do ld-linux como para su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

De um CD ao vivo

Como discutido nos comentários, se você perdeu o shell raiz, está praticamente travado. Basicamente, para corrigir isso, você precisa de privilégios de root. A única maneira de chegar lá é ter um utilitário como suou sudoaumentar suas permissões (que não são funcionais neste momento) ou seqüestrar outro programa que já esteja sendo executado como root (dependendo do que está sendo executado, provavelmente não é possível).

Isso deixa a única opção de ser um CD ao vivo. Depois de inicializado em um CD ao vivo (ou USB ao vivo, ou qualquer outra coisa), basta montar o volume raiz e mover os diretórios afetados de /varvolta à sua casa original /.


Sinopse do que aconteceu

folder/*teria expandido para algo como folder/fooe folder/bar.
/*teria expandido para algo como /bin /lib32 /lib64 /etc /home /root /var. Observando que /varé o último item.
Portanto, quando o shell expandisse todos esses globs, ele teria algo assim:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Como /varé o último item da lista, tudo foi movido para ele.


Por que /var/bin/suerros com/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Quase todos os binários no linux estão dinamicamente vinculados ld-linux. ld-linuxé a biblioteca responsável por carregar as outras bibliotecas necessárias por um binário. No seu sistema, isso mora em /lib64/ld-linux-x86-64.so.2. Desde que este diretório foi movido, qualquer executável vinculado dinamicamente não funcionará mais.

O motivo pelo qual o busybox funciona é que o busybox está vinculado estaticamente. Não usa ld-linux.

Patrick
fonte
Boa ideia. O CentOS normalmente possui um busybox instalado por causa do initramfs , portanto isso pode funcionar bem.
Pavel Šimerda
busyboxParece que a solução perfeita, infelizmente não instalada, será corrigida ... Enquanto isso, existe alguma maneira de corrigir o caminho dos comandos a serem executados em /var/lib64/ld-linux-x86-64.so.2vez de /lib64/ld-linux-x86-64.so.2? Este parece ser o que está matando os comandos/var/bin
webaholik
@ Patrick: Você poderia adicionar as informações que também estão incorretas no comando OP pretendido? Eu poderia excluir minha resposta, pois agora é (quase) redundante. A propósito, é o caminho certo para usar a troca de pilhas?
Pavel Šimerda
1
É olhar para várias coisas em /etcque não estão lá ( /etc/passwd, /etc/nsswitch, /etc/pam.d, e provavelmente mais). Para sutrabalhar, /etcdeve estar de volta em seu local original. A menos que você tem um shell de root, que ao redor, eu acho que você está preso :-(
Patrick
2
@ user1296209 Depois de obter um livecd, basta montar o volume raiz e mover esses diretórios de volta. Isso deve ser tudo o que você precisa para voltar a funcionar.
Patrick
10

mv folder/* ./*está errado também. Você deve ter mais cuidado com a semântica dos comandos executados. O mvcomando com mais de dois argumentos apenas pega todos os argumentos, exceto o último, e move os caminhos para os quais eles apontam para o diretório especificado no último argumento.

Para mover todos os diretórios (exceto os ocultos) da pasta para o diretório atual, você deve usar:

mv folder/* .

Você quebrou o sistema em execução. Seus comandos shell e builtin continuam funcionando. Você precisará inicializar um CD ao vivo e mover os diretórios de volta. Eu não estou ciente de um bash embutido para mover / renomear arquivos que permitiriam corrigir a situação sem reiniciar, consulte a resposta de Patrick para obter mais detalhes.

Pavel Šimerda
fonte
Eu não percebi isso: posso cd para / var / bin & / var / etc, parece que as pastas foram movidas para var, de qualquer maneira eu posso movê-las de volta? ... sem livecd?
Webaholik
Tentei / var / bin / su & get: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: intérprete ELF ruim: esse arquivo ou diretório não
existe
Aha ... Eu vou resolver a resposta.
Pavel Šimerda
qual deveria mvter sido o meu comando para mover todos os arquivos e pastas da pasta para o diretório atual?
Webaholik
1
@ user1296209: Se você inicializa um sistema ativo, certamente tem acesso root no seu sistema de vida. Seu sistema atual é apenas uma partição montada sem significado especial para o sistema ativo. A única complicação é que seus diretórios /e /varpodem estar em partições diferentes; nesse caso, você precisa montar os dois.
celtschk
2

Mudei acidentalmente / usr para / usr_old e tudo deu errado. Felizmente, fiquei no prompt e consegui executar o seguinte comando para restaurar a pasta usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr
Mansehr
fonte
Bem-vindo ao U&L, esse foi o único comando que você digitou? Forneça um procedimento mais detalhado. (especialmente para um mont questão de idade de dez, não há necessidade de pressa)
Archemar
1
Sim, depois que eu digitei esse comando, tudo foi restaurado. Talvez eu deva mencionar que fui raiz durante tudo isso.
Mansehr
1

IMPORTANTE Se você está aqui e executou mvincorretamente, não pode executar shellcomandos e pastas ausentes no diretório raiz ( /), primeiro, se tiver SU, NÃO saia SUaté que seja corrigido, porque você não o recuperará. Se você estiver conectado remotamente, se desconectar, não poderá sshdeixar o servidor em paz, não reboot- a maioria dos serviços em execução deve estar OK. Você pode tentar uma das muitas soluções sugeridas por Patrick ... no entanto, você provavelmente precisará de acesso físico se errar como eu.

Uma vez na frente da máquina, eu a reinicializei. Como esperado, recebi um pânico no kernel.

Eu pensei que isso seria uma correção muito fácil, insira o livecd, entre no modo de recuperação ATÉ ESTE PONTO FOI FÁCIL - então eu tive que tentar montar meu diretório raiz. No entanto, eu precisava mais do que apenas um simples comando de montagem.

Isso porque eu, como muitas pessoas, tinha um sistema de arquivos lvm, e essa foi a primeira vez que tive que lidar com um resgate como esse. Eu tive que pesquisar na web para ver o que precisava fazer. Eu consolidei essas informações para este post. Aqui foi o meu processo para corrigir o meu problema.

1) Centos_6.4_min cd inserido

2) A interface GUI perguntou o que eu queria fazer, escolheu o Rescue

3) O Rescue tentou montar o sistema atual, mas indicou que eu não tinha partições Linux

4) Escolheu entrar shellquando a opção foi dada

Neste ponto, tentei muitas coisas para montar o sistema, sem sorte, tenho certeza de que estas são todas as etapas que eu tive que executar (por causa do lvm):

5) Digitalizei meus volumes,

lvmdiskscan

6) Ran lvscan, mostrou todos listados como "inativos"

lvscan

7) carregar o módulo do dispositivo

modprobe dm-mod

8) altere os volumes existentes para ativos

vgchange -ay

9) Funcionou lvscannovamente, agora todos os itens listados como "ativos"

10) Ponto de montagem criado e montagem da partição lógica

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Pastas movidas de volta (você pode precisar de outras pessoas):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) SUCESSO!

webaholik
fonte