ログインのような機能を suPHP のファイル許可を使用するように設計するにはどうすればよいでしょうか。たとえば、 に Web サイトがwww.example.com
あり、次の 2 人のユーザーが独自のホーム ディレクトリを持ち、それぞれに php scripttest.php
があり、ディレクトリ内validateUser.php
に別のユーザー (root、www-data、apache...) に属するスクリプトがあるとします/home
。
/家/ ├──validateUser.php ├── ユーザー1 │ └── test.php └── ユーザー2 └──test.php
user1
user2's
にアクセスしてスクリプトにアクセスできwww.example.com/user2/test.php
、その逆も可能です。代わりに、 mod_rewriteのようなものを使用して、すべての受信リクエストをvalidateUser.php
. ただし、これを行うとvalidateUser.php
、ターゲットtest.php
スクリプトではなく、 の所有者としてすべてのスクリプトを実行することになります。
とにかく suPHP が作動する前に php スクリプトを呼び出してから、suPHP を続行させるか、完全に中止する必要がありますか?
編集これは私が立てている 2 番目の報奨金です。私が最初に Gustav b/c に渡したとき、彼は良い部分的な答えをくれました。私がこれまでに試みたことと、それらのどれもがうまくいかない理由について述べます。
1) mod_rewriteを使用して URL をリダイレクトしvalidateUser.php
、ユーザーをログインさせるか、呼び出したいスクリプトを呼び出してみました。問題は、各ユーザーが独自の仮想サイトを持つように仮想ホストを設定したことです (つまりwww.user1.example.com
、www.user2.example.com
...これが悪い設計アプローチである場合は、遠慮なく指摘してください)。したがって、OS はファイル構造を上記のように認識しますが、オンラインでは、ルート ディレクトリはそのように設定されます。
VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php
validateUser.php
当然のことながら、すべてのユーザーのディレクトリにのコピーを移動しました。問題は、ユーザーがそのファイルを削除して、ログインをまったく必要としないなど、必要なものをそこに入れることができるようになったことです。これを回避する方法は、ホーム フォルダーをスティッキーにし (ホーム フォルダーに対して行うことは決してお勧めしません)、validateUser.php
所有者をルートにすることです。ただし、これは suPHP であるため、AS root が実行されます。そこで諦めました。
2) Gustav のmod_auth
提案を使用することもできますが、前もってパスワードを要求するのは好きではありません (古い学校の Web サイトのように)。
3) 仮想ホスト間でリダイレクトできる場合は、1) のバリアントを検討しました。たとえば、次のように仮想ホストを再構築します
VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php
次に mod_rewrite を使用して、ユーザーからwww.admin.example.com/validateUser.php
のすべてのトラフィックを にリダイレクトします。ユーザーがログインしている場合 (またはログインが成功した場合)、ユーザーは最初にログインしようとしたサイトにリダイレクトされます。これの利点は、可能であれば、ユーザーが自分の仮想ホストに戻されるまで suPHP が開始されないことです。