Ошибка сегментации при использовании 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 снова будут работать.