3

現在、最新のプロジェクトの管理ポータルを作成しています。私は自分のコンピューターで新興企業を機能させるために戦ってきましたが、今ではウェブから新興企業を操作できるようにしたいと考えていました。PHPスクリプトで次を実行する必要があります

sudo restart job
sudo start job
sudo stop job

ご覧のとおり、sudo はこれらのコマンドのテーマであるため、この php スクリプトから何らかの方法で sudo を実行する必要があります。どうすればこの問題に対処できますか、または回避策はありますか。

それが重要な場合:

# which start
 /sbin/start
# which stop 
 /sbin/stop
# which restart
 /sbin/restart
4

1 に答える 1

0

いくつかのアプローチが見られます。確かに www-data を sudoers リストに追加してから、www-data のパスワードをスクリプトにハードコードする (あまり良くない) か、ファイルから読み取る (少し良い) ことで、sudo を機能させることができます。この方法を使用する場合、実際には使用可能なパスワードがないため、www-data のパスワードを手動で上書きする必要があるでしょう。www-data は、セキュリティ対策として意図的にほとんどの権限を剥奪されているため、これらのアプローチはいずれも推奨されません。大きなもの (sudo など) を付与し、そのパスワードをファイルまたはスクリプトに入れると、セキュリティ上の重大な脆弱性が生じます。

あまりにも多くのセキュリティ ホールを開くことなく、必要な機能を有効にする非常に制限された sudo 権限を www-data に付与できる場合があります。詳細については、sudo と sudoers ファイルを参照してください。

より良いアプローチは、開始/停止/再起動の引数を取り、適切な upstart コマンドを呼び出すスクリプトを作成することです。秘訣は、このスクリプトを setuid root ( chown root:root script.sh; chmod +s script.sh) にして、www-data ではなく root として実行することです。このスクリプトに 755 のアクセス許可を与えて、root のみが変更できるようにします。これにより、セキュリティ リスクが制限され、必要な権限が得られますが、それ以上の権限はありません。

セキュリティ リスクが高すぎるため、最近のほとんどの Unix システムでは、シェル スクリプトで宣伝されているように動作するように意図的に setuid を無効にしているため、setuid アプローチはおそらくシステムで直接機能しません (最初に試してください)。これは、(setuid が引き続き機能する) C プログラムを使用してスクリプトを呼び出す回避策を説明する記事です。少し複雑ですが、うまくいくはずです。

おそらく最善の方法は、upstart のイベント メカニズムを活用し、upstart がキャッチして .conf ファイルに転送するイベントを Web コードで発生させることです。私は自分自身で新興企業を学んでいるので、詳細を説明することはできませんが、このように使用されることを意図していると感じています.

于 2011-11-11T20:13:30.790 に答える