4

LinuxでEclipse(gdb)を使用してプログラムをデバッグする必要があります。プログラムはrootとして実行され、非常に大きくなります。デバッグシンボルのあるバイナリは約250MBの大きさで、起動後に60を超える実行中のスレッドがあります。

私は最良の解決策について考えています:

  1. gdbserverを使用する
  2. ルートとしてEclipseを実行する
  3. gdbsuidを設定します

1番(gdbserver)が最善の解決策だと思いますが、残念ながら信頼性は高くありません。gdbとgdbserver間の接続が失われます。Eclipse <-> gdb<->gdbserver間で転送される大量のデータに問題があると思います。

2番目(Eclipseをrootとして実行)は、すべてのプロセスをrootとして実行することを意味し、Eclipseプラグインはバージョン管理されたファイルを変更するために私の代わりにrootユーザーを使用するため、バージョン管理システムにも干渉します。

3番(suid gdb)は試しませんでした。あなたはそれについてどう思いますか?それはまったく機能しますか?suid root gdbは、root-Passwordがまったくないのと同じくらい安全であることを知っていますが、マシンは私だけが開発とデバッグに使用します。そしてもちろん、必要な場合にのみsuidビットを設定する「有効化/無効化」スクリプトが存在する可能性があります。

他に何か提案はありますか?

4

2 に答える 2

3

邪魔にならない (suid をいじる必要がない) 方法は、gdb を /etc/sudoers で root として実行するように設定してから、次のコマンドを実行することです。

sudo xauth マージ ~/.Xauthority

須藤gdb

Xサーバーへのルートオープン接続を許可するために最初のコマンドが必要です

于 2010-12-02T15:00:38.153 に答える
1

1) または 3) のいずれかが優れたソリューションのように聞こえます。

gdb<->gdbserver トラフィックの量は決して多くありません。接続が失われたということは、信頼できるトランスポート プロトコルを使用していないことを意味します (どの接続プロトコル使用していますか? ローカル ソケットを試しましたか?)、または gdb/gdbserver のバージョンのバグ (どのバージョンですか?)

4:最初からルート権限を必要としないようにプログラムを変更することも検討してください。大きなプログラムにはバグがあります。バグ + suid-root => OWND マシン。おそらく、このプログラムを顧客に出荷するでしょう。彼らが OWND マシンに苦しんでいる場合、彼らはあなたの後を追って損害賠償を請求することができます。

通常、本当に root パーミッションを必要とする一連の操作はごくわずかであり、そのような操作は (十分に頻度が低い場合)、「ヘルパー バイナリ」(suid-root ですが、常に実行されるわけではありません) によって最適に実行されます。小さい => バグが発生しにくい)。

于 2010-08-06T16:41:34.743 に答える