web-dev-qa-db-ja.com

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が表示されます。問題の解決策をオンラインで探し、 this threadに遭遇し、LD_PRELOAD=/lib/i386-linux-gnu/libpthread.so.0 gdb su(スレッドで提案されているように)を実行しようとしました。その後、もう一度実行しようとすると、同じエラーが発生しました。

痕跡に基づいて、スレッド化の方法に問題があると思いますが、これを修正する方法がわかりません。基本的な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ビットであると確信しています)

5
user1253952

aptdconを使用します。これは、dbusを介してapt-daemonと通信するため、suまたはSudoを必要とせず、破損したパッケージを再インストールします。おそらくあなたの最善のチャンスは、すべてのパッケージを再インストールすることです。

最初に、修正待ちの壊れたインストールがないことを確認します。

aptdcon --fix-install

また、ディスクに使用可能な空き領域があることを確認してください。

df -h

次に、現在インストールされているパッケージリストを取得します。

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

後で、何かのテキストエディタで保存します。次に、完全なパッケージリストを使用して、次のようにaptdconを呼び出します。

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

aptdconはさまざまな理由で一部のパッケージを再インストールできないため、この方法であなたに伝えています。したがって、aptdconがそれについて泣いた場合は、それらを削除し、もう一度試してください。一度よりも。

OPが発生したときに問題がある場合、JorgeSuárezde Lisが提案したことを実行できません。依存関係エラーがスローされるためです。

そう、

aptdcon --reinstall "libsqlite3-0"

そして

aptdcon --install "libsqlite3-0"

エラーメッセージを返します。

エラー:org.debian.apt.TransactionFailed-error-cache-broken:次のパッケージには依存関係が満たされていない:

これをしている間:

aptdcon --fix-depends

修正され、suとSudoが再び動作します。

0
Johano Fierra

私はこの問題を見ましたが、根本的な原因はわずかに異なっていました。私はKerberosをテストしていましたが、/ etc/krb5.confに何か間違った設定がありました。 straceを使用して、Sudoがそのファイルを読み込んだ直後にセグメンテーション違反を起こしていることを発見したため、構成ファイルに問題があると考えました。特定の変数を追跡しませんでしたが、際立っていたことの1つは、krb5.confでdefault_domain変数を空にしていたことです。

[libdefaults]
   default_realm = 

これにより、Sudoのいくつかのずさんなコードが長さゼロの文字列を作成し、それを誤って処理してSIGSEGVを引き起こす可能性があります。これは正しい設定ではなかったため、これ以上デバッグしようとしませんでした。 /etc/krb5.confを削除しただけです。

0
BeantownGuy80

Sambaのpamモジュールがこれを引き起こしている可能性があります。

その場合、これはそれを修正する必要があります:

  • マシンを再起動し、回復モードで起動することを選択します。リカバリモードが表示されない場合は、最初に[詳細オプション]オプションを選択する必要があります。
  • リカバリメニューから[ルートシェルにドロップ]を選択します
  • 次のコマンドを実行します:dpkg --purge libpam-smbpass
  • 次のコマンドを実行します:dpkg --purge libpam-winbind

その後、「su」と「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

0
jelle foks