rootが所有するファイルがあります。明らかに、ファイルを自分で変更可能としてマークする方法を見つける必要があります。または、特権を変更できるように特権を昇格させる方法。
これは、これを行うための2つの従来のUNIXアプローチにつながります。彼らです:
ファイルをマークするためのグループを作成します。initdebug; ファイルをchgrp/chmodして、initdebugグループを持ち、グループ書き込み可能にします。そして、自分自身をinitdebugグループに追加して、グループの書き込み権限を使用してファイルを変更できるようにします。
必要な特定の変更を実行する非常に小さい監査済みバイナリ実行可能ファイル(これはスクリプトでは機能しません)を作成するには(簡単にするために、ルート所有のPHP iniファイルの選択の1つを適切な場所にコピーすることをお勧めします)。次に、ファイルがrootによって所有されるようにファイルをchownし、実行可能ファイルにsuidビットを設定してrootとして実行されるようにします。
次の2つのアプローチを組み合わせることもできます。
自分自身をinitdebugグループのメンバーまたは実行可能ファイルのsuidにするのではなく、実行可能ファイルのグループをinitdebugに設定し、そのsgidビットを設定します。また、
実行可能suidrootを保持しますが、initdebugによってのみ実行可能にし、したがって、そのグループに追加されたユーザーによってのみ実行可能にします。
セキュリティのトレードオフは、誰かがあなたのアカウントをハッキングした場合の特権昇格の容易さ/リスクにあります。実行可能ファイルにスタック/ヒープオーバーフローまたは同様の脆弱性があり、それがrootとして実行されている場合、あなたは去っています。PHPのiniファイルを変更してリモートの脆弱性を開くことができる場合、彼らがiniファイルに直接アクセスできる場合は、あなたは去っていきます。
後者が可能だと思うので、おそらく小さな実行可能ファイルを使用するのが最善です。
注:上記で触れたように、unixはスクリプトのs [ug] idビットを認識しません(#!...インタープリター構文を使用して何かとして定義されます)。したがって、バイナリにコンパイルできるものを使用する必要があります。つまり、おそらくC、C ++、Java(gcjを使用)、ML、Scheme(mit)、Haskell(ghc)のいずれかを意味します。
これまでにCまたはC++プログラミングを行ったことがない場合は、suidバイナリはC / C ++を学習するためのプロジェクトではないため、他の1つをお勧めします。他の言語を知らない場合は、MLまたはJavaのいずれかをお勧めします。これは、小さくて単純なものを書くのに最も簡単な言語です。
(ところで、http://en.wikipedia.org/wiki/List_of_compilersには、使用できる代替コンパイラのリストが含まれています。バイトコードではなくネイティブにコンパイルされることを確認してください。OSに関する限り、バイトコードvmは単なる別のものです。通訳者)。