
デバッグシンボルを使用してlibpcre2を/usr/local/libに手動でコンパイルし、/lib64にインストールされているバージョンを削除しました。 first runを介してユーザーとしてコマンドを実行することはできますが、メッセージでexport LD_LIBRARY_PATH=/usr/local/lib
実行は失敗し続けます。sudo
sudo:共有ライブラリの読み込み中にエラーが発生しました。 libpcre2-8.so.0:共有オブジェクトファイルを開くことができません。そのファイルやディレクトリはありません。
-E
orオプションで実行しても-H
この現象が発生します。sudo - root
「su:認証失敗」と表示されます。どんなアイデアがありますか?
答え1
図書館はなぜ利用されないのですか?
安全上の理由から、動的リンカーはLD_LIBRARY_PATH
ロードされるプログラムにsetuidビットまたはsetgidビットセットがあるかどうかを無視します。それ以外の場合は、元の操作以外の操作を実行するために無害なシステム/ライブラリ呼び出しを使用または上書きするLD_LIBRARY_PATH
古い手法が発生します。LD_PRELOAD
このトリックから保護されていないsetuid rootプログラムでこれを行うと、root権限を持っている間にプログラムが実行する操作を制御できます。その時点では、できることにまったく制限はありません。 。
マンページでこのセキュリティメカニズムの説明を見つけることができますld.so(8)
。
安全実行モード
セキュリティ上の理由から、動的リンカーがバイナリをセーフモードで実行する必要があると判断した場合、特定の環境変数の効果が無効または修正されます。 (詳細については、以下の個々の環境変数の説明を参照してください。)補助ベクトル(getauxval(3)を参照)のAT_SECUREエントリにゼロ以外の値がある場合、バイナリはセーフモードで実行されます。このエントリは、次のようなさまざまな理由でゼロ以外の値を持つことができます。
- プロセスの実ユーザー ID と実効ユーザー ID が異なっているか、実グループ ID と実効グループ ID が異なります。これは通常、ユーザーID設定またはグループID設定プログラムを実行した結果です。
- root以外のユーザーIDを持つプロセスは、プロセスに機能を付与するバイナリを実行しました。
- Linuxセキュリティモジュールがゼロ以外の値に設定されている可能性があります。
...環境変数の詳細と、LD_*
各変数が安全実行モードによってどのように影響されるかを説明します。
問題を解決する方法
これに対して独自のファイルを追加または作成し、ルートとして実行して新しいライブラリパスが選択されていることを/usr/local/lib
確認/etc/ld.so.conf
できます。/etc/ld.so.conf.d/*.conf
ldconfig
sudo
そうしないと、シングルユーザー/回復モードで起動し、rootパスワードを忘れたかのようにシステムにアクセスする必要があります。ただし、ルートパスワードをリセットする必要はなく、代わりに/etc/ld.so.conf[.d]
上記のように修正してください。
-E
ここでオプションがsudo
役に立たない理由
マニュアルsudoers(5)
ページには次のように記載されています。
ほとんどのオペレーティングシステムの動的リンカは、setuid実行可能ファイル環境でsudoを含む動的リンクを制御できる変数を削除します。オペレーティングシステムによっては
_RLD*
、、、、DYLD_*
などが含まれる場合がありますLD_*
。このタイプの変数は、sudoが実行を開始する前に環境から削除されるため、sudoはその変数を保持できません。LDR_*
LIBPATH
SHLIB_PATH
sudo - root
あなたが私に教えてくださいsu: Authentication failure
。コマンドとエラーメッセージが一致しません。本当に逃げましたかsu - root
?その場合は、ルートアカウントのパスワードがデフォルトでロックされているUbuntuまたは他のLinuxディストリビューションを実行しています。これらのディストリビューションは、sudo
管理者アクセスに大きく依存することがよくあります。ディストリビューションにこのような場合があります/lib64
。