/var/www/xyzを「トラバース」してフォルダなどを検索するスクリプトを書いています。これらのフォルダは「ユーザーにバインド」されているため、個々のフォルダに対する権限は特定のユーザーに設定されます。
このスクリプトをルート(たとえば、/rootの 'php myscript.php')として実行すると、期待した結果が返されます。
今、結果をブラウザに送信したいと思います。 /var/www/newfolderでindex.phpファイルを生成し、スクリプトをこのファイルに貼り付けてから(ブラウザで)試しましたが、もちろん失敗しました。結果の一部のみが表示されます(ドリルダウンしない場合は、ユーザー固有のフォルダ名を表示)。これはwwwユーザーとして許可事項であることが確実です。
うん、そうであれば質問はこうです。関数(たとえば)を含むファイルを/ varに入れ、ブラウザのwwwユーザーがその関数を呼び出すことを許可できますか?それでは、役に立つリンクやヒントはありますか? (久しぶりにグーグルをやってみたけど無駄なものが見つかりました)
または
私の/var/www/newfolder/で関数を呼び出すと、ユーザーフォルダを検索するのに十分な権限がありますか? (セキュリティ上大事だと思います)
答え1
セキュリティについて心配するのは正しいです。 setuidビットを使用して、実行可能ファイルを呼び出したユーザーの代わりに実行可能ファイルの所有者として実行される実行可能ファイルを作成できます。実行可能ファイルを root が所有している場合は root として実行されます (root 以外の誰にも書き込み権限を与えないように注意)。実行可能ファイルを実行できる人を制限するには、グループ権限を使用します。
chmod o+s <path to script>
setuidビットをオンにするために使用されます。 (chmod 4750 <path to script>
所有者グループはファイル所有者としてファイルを読み取って実行できますが、他のユーザーはアクセスできません。)
rootでスクリプトを実行する必要がない方法は、wwwユーザーがフォルダの内容を読むことができるように、検索するフォルダのグループ所有者と権限を設定することです。フォルダにsetgidビットを使用すると、そのフォルダに作成されたすべてのファイルとフォルダがグループの所有権を継承します。
chmod g+s <path to folder>
setgidビットをオンにするために使用されます。/var/www/
フォルダ(およびサブフォルダ)をグループに設定し、www-user
グループ内のユーザーがすべてのフォルダにアクセスできるようにするには、rootとして次を使用します。
chgrp -R www-user /var/www/
chmod -R g+srX /var/www/