falha de segmentação ao usar su ou sudo

4

exemplo do problema:

$ su
Segmentation fault
$ sudo ls
Segmentation fault

Eu tentei compilar o sqlite3 da fonte anterior. Eu não sei quais bibliotecas ele instalou. Esta pode ser a razão pela qual isso está acontecendo.

Eu tentei strace su e termina com o seguinte:

...
fstat64(6, {st_mode=S_IFREG|0644, st_size=17964, ...}) = 0
mmap2(NULL, 20788, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 6, 0) = 0xb7295000
mmap2(0xb7299000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 6, 0x3) = 0xb7299000
close(6)                                = 0
mprotect(0xb7299000, 4096, PROT_READ)   = 0
mprotect(0xb72f9000, 4096, PROT_READ)   = 0
set_tid_address(0xb758a728)             = 11144
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)

Quando eu tento gdb su e tento executar, ele me dá Cannot find new threads: generic error . Procurei on-line uma solução para o problema, encontrei este thread, e, em seguida, tentei executar LD_PRELOAD=/lib/i386-linux-gnu/libpthread.so.0 gdb su (como sugerido no thread). Quando tentei executá-lo novamente, ocorreu o mesmo erro.

Com base no strace, acho que há algum problema com a segmentação, mas não tenho ideia de como corrigir isso. Existe alguma maneira de reinstalar os utilitários bash básicos?

Veja mais informações sobre o meu sistema:

$ uname -a
myhost 3.2.0-37-generic-pae #58-Ubuntu SMP Thu Jan 24 15:51:02 UTC 2013 i686 i686 i386 GNU/Linux

(tenho certeza que o hardware é de 64 bits)

    
por user1253952 23.02.2013 / 20:25

4 respostas

2

Use aptdcon , que se comunica com apt-daemon via dbus , portanto, não precisa de su ou sudo para reinstalar os pacotes danificados. Provavelmente, sua melhor chance é reinstalar TODOS os pacotes.

Primeiro, verifique se não há uma instalação interrompida pendente de uma correção:

aptdcon --fix-install

Verifique também se há espaço livre disponível em seu disco:

df -h

Em seguida, obtenha sua lista de pacotes atualmente instalada:

echo \"$(dpkg --get-selections | grep install | cut -f 1)\"

Guarde isso para depois, em um editor de texto de alguma coisa. Então, chame aptdcon assim, usando a lista completa de pacotes:

aptdcon --reinstall "package1 package2 package3..."

Estou lhe dizendo isso porque aptdcon não poderá reinstalar alguns pacotes por vários motivos, então você terá que retirá-los se aptdcon chorar sobre isso e tentar novamente, provavelmente mais do que uma vez.

    
por Jorge Suárez de Lis 23.02.2013 / 21:03
0

Eu vi esse problema, mas a causa raiz foi um pouco diferente. Eu estava testando o Kerberos e tinha algo desconfigurado no meu /etc/krb5.conf. Eu descobri via strace que sudo estava segfaulting logo após a leitura desse arquivo, então eu percebi que havia um problema com o meu arquivo de configuração. Eu não rastreei uma variável específica, mas uma coisa que se destacou foi que eu tinha a variável default_domain vazia no krb5.conf assim

[libdefaults]
   default_realm = 

Isso pode fazer com que algum código malfeito no sudo crie uma cadeia de comprimento zero e a trate de alguma forma causando o SIGSEGV. Eu não tentei depurar mais, já que essa não era a configuração correta. Eu simplesmente deletei meu /etc/krb5.conf.

    
por BeantownGuy80 04.02.2014 / 00:28
0

Há uma chance de que um módulo pam do samba esteja causando isso.

Se for esse o caso, isso deve corrigir:

  • Reinicialize a máquina e opte por inicializar no modo de recuperação. Se você não puder ver o modo de recuperação, primeiro precisará escolher a opção "Opções avançadas para".
  • Escolha "drop into root shell" no menu de recuperação
  • Execute o comando: dpkg --purge libpam-smbpass
  • Execute o comando: dpkg --purge libpam-winbind

Então você deve poder usar 'su' e 'sudo' novamente.

Você pode querer ou precisar fazer um

  • sudo apt-get -f instalar

para ajudar a corrigir os pacotes quebrados restantes.

Se você precisar do pacote libpam-smbpass e / ou libpam-winbind, ou tiver um pacote 'samba' quebrado, você pode achar que você precisa excluir ou renomear /var/lib/samba/secrets.tdb:

  • sudo mv /var/lib/samba/secrets.tdb /var/lib/samba/secrets.tdb.old

Fonte / Relacionado: link

    
por jelle foks 16.02.2014 / 23:45
0

Se você tiver o problema que o OP encontrou, não poderá fazer o que Jorge Suárez de Lis sugeriu, pois isso gerará um erro de dependências.

Então,

aptdcon --reinstall "libsqlite3-0"

e

aptdcon --install "libsqlite3-0"

retorna a mensagem de erro:

ERRO: org.debian.apt.TransactionFailed - erro-cache-quebrado: Os seguintes pacotes têm dependências não atendidas:

Enquanto faz isto:

aptdcon --fix-depends

consertará e su e sudo funcionarão novamente.

    
por Johano Fierra 02.08.2014 / 14:16