Ошибка сегментации при использовании su или sudo

Пример проблемы:

$ su
Segmentation fault
$ sudo ls
Segmentation fault

Я пытался скомпилировать sqlite3 из исходного кода ранее. Я не знаю, какие библиотеки он установил. Это может быть причиной, почему это происходит.

Я старался strace su и это заканчивается следующим:

...
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)

Когда я пытаюсь gdb su и попытаться бежать, это дает мне Cannot find new threads: generic error, Я посмотрел в Интернете для решения проблемы, столкнулся с этой темой, а затем попытался запустить LD_PRELOAD=/lib/i386-linux-gnu/libpthread.so.0 gdb su (как предложено в теме). Когда я попытался запустить его снова, он выдал мне ту же ошибку.

Основываясь на strace, я думаю, что есть некоторая проблема с тем, как это продвигается, но я понятия не имею, как это исправить. Есть ли способ переустановить базовые утилиты bash?

Вот больше информации о моей системе:

$ 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

(Я почти уверен, что аппаратное обеспечение 64-битное)

4 ответа

Решение

Использование aptdcon, который общается с apt-daemon с помощью dbus так что не нужно su или же sudo, чтобы переустановить поврежденные пакеты. Вероятно, ваш лучший шанс - переустановить ВСЕ пакеты.

Во-первых, убедитесь, что нет неустановленной установки в ожидании исправления:

aptdcon --fix-install

Также убедитесь, что на вашем диске есть свободное место:

df -h

Затем получите список установленных на данный момент пакетов:

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

Сохраните это на потом, в текстовом редакторе чего-нибудь. Затем позвоните aptdcon вот так, используя полный список пакетов:

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

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

Я видел эту проблему, но коренная причина была немного другой. Я тестировал Kerberos и что-то неправильно настроено в моем /etc/krb5.conf. Через strace я обнаружил, что вскоре после прочтения этого файла в sudo произошел сбой, и решил, что проблема в моем файле конфигурации. Я не отслеживал определенную переменную, но одна вещь, которая выделялась, состояла в том, что переменная default_domain была пустой в krb5.conf, вот так

[libdefaults]
   default_realm = 

Это может привести к тому, что какой-то неаккуратный код в sudo создаст строку нулевой длины и неправильно обработает ее, вызывая SIGSEGV. Я не пытался отлаживать это дальше, так как это не было правильной настройкой. Я просто удалил мой /etc/krb5.conf.

Есть вероятность, что модуль pam из samba вызывает это.

Если это так, то это должно исправить это:

  • Перезагрузите компьютер и выберите загрузку в режиме восстановления. Если вы не видите режим восстановления, сначала вам нужно выбрать "Дополнительные параметры для".
  • Выберите "перетащить в корневую оболочку" в меню восстановления
  • Выполните команду: dpkg --purge libpam-smbpass
  • Выполните команду: dpkg --purge libpam-winbind

Тогда вы сможете снова использовать "su" и "sudo".

Затем вы можете захотеть или нужно сделать

  • sudo apt-get -f установить

чтобы помочь исправить все оставшиеся сломанные пакеты.

Если вам нужен пакет libpam-smbpass и / или libpam-winbind или у вас сломан пакет 'samba', вы можете обнаружить, что вам нужно удалить или переименовать /var/lib/samba/secrets.tdb:

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

Источник / Связанный: https://bugs.launchpad.net/ubuntu/+source/samba/+bug/260687

Если у вас возникла проблема с OP, вы не сможете сделать то, что предложил Хорхе Суарес де Лис, так как это приведет к ошибке зависимости.

Так,

aptdcon --reinstall "libsqlite3-0"

а также

aptdcon --install "libsqlite3-0"

возвращает сообщение об ошибке:

ОШИБКА: org.debian.apt.TransactionFailed - ошибка кеш-кэша: следующие пакеты имеют неудовлетворенные зависимости:

Делая ЭТО:

aptdcon --fix-depends

исправит это, и su и sudo снова будут работать.

Другие вопросы по тегам