ホームディレクトリ内からWebサイトを実行する必要はありません。 今まで。 それ以外の場合は/home/
、ディレクトリ構造を表示するためにWebサーバーを通過する機能を提供する必要があり/home/$USER/
ますが、(ユーザーのホームディレクトリ、ユーザーディレクトリに存在する他のものを試してみることができます)、およびその他のサブフォルダーそこで。不十分に設定された、または誤って設定された、またはパッチが適用されていないWebサーバーは、このように大量のデータ漏洩、または資格情報の損失などを引き起こし、個人データとログインを異なるものにさらす危険性があります。あなたが使用しているシンボリックリンクのアプローチは、Apacheに読み取り許可を与えようとするのと同じ理由で助けにはなりません/home/andre/www/moodle
-Webサーバーは、ホームディレクトリを走査して、シンボリックリンクが/var/www/html
指す場所に到達できる必要がありますが、それでもセキュリティ上のリスクがあります。
まず、を使用しますsudo cp -r /home/andre/www/moodle/ /var/www/html/
。これにより、ファイルがにコピーさ/var/www/html
れ、自分のホームディレクトリから遠ざけられます。次に、アクセス許可をやり直して、ユーザーとWebサーバーがそのディレクトリ内のすべてにアクセスできるようにし、ユーザーにすべてのファイルとディレクトリへの完全な読み取り/書き込みを許可します。それから、あなたは/var/www/html
あなたのサイトのために努力するだけです。
これは、データを次の場所にコピーしてから4つのステップで有効になります/var/www/html
。
- Apacheがフォルダーとファイルにアクセスできるようにして、403エラーなしでサイトを提供できるようにします。
- ユーザーにファイルとフォルダーの「所有者」を与え、すべてのファイルとフォルダーの読み取り/書き込みを許可し、ディレクトリを走査する機能を与えます。
- (オプションだが推奨)ここからディレクトリ構造全体で作成されたファイルまたはフォルダのグループがに設定されるように設定します
www-data
。
- (オプション)最終セキュリティクリーンアップ。ユーザーとWebサーバーがサイトデータを表示できるようにアクセス許可を設定しますが、他のユーザーはサイトのファイルまたはディレクトリ構造にアクセスできません。
(1)フォルダおよびファイルへのApacheアクセスを許可します。
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
これにより、「グループ」がwww-data
フォルダーおよびファイル用に再帰的に設定されます。これにより、Webサーバーに、サイトドキュメントのルートディレクトリ構造(+x
ディレクトリのみ)に再帰してアクセスする許可が与えられます。また、Webサーバーがすべてのファイルの読み取り権限を持っていることを確認し、サイトデータを受信できるようにします。
Webサーバーにファイルまたはディレクトリへの書き込み許可を与える必要がある場合があります-これを行うことで実現できますsudo chmod g+w /var/www/html/PATH
(ここPATH
で、ディレクトリ構造内のファイルまたはフォルダへのパスは、 Webサーバーの書き込み許可)。
注意:これにより、サイト構成に関する「セキュリティで保護された」情報(データベースアクセス資格情報など)が公開される場合が多いため、これらの個々のファイルまたはディレクトリのデータに対する「その他」のアクセス許可を削除する必要があります以下:(ファイルのフォルダーへの相対パスでsudo chmod o-rwx /var/www/html/FILEPATH
置き換えます)。FILEPATH
/var/www/html
また、「新規ファイル」に403の問題が発生した場合、これらのコマンドを将来再実行しなければならない場合があることに注意してください。www-data
グループが正しく設定されていません。
(2)所有者にフォルダーとファイルの読み取り/書き込み権限を付与し、フォルダーアクセスがディレクトリ構造を横断することを許可します。
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
USER
最初のコマンドで自分のユーザー名に置き換えてください!
ここでは3つのことを行います。まず、ユーザーをのすべてのファイルとディレクトリの「所有者」に設定します/var/www/html
。次に、フォルダーに読み取りおよび書き込みのアクセス許可を設定し、フォルダーにアクセスしてフォルダー(+x
ディレクトリアイテムのアイテム)に入ることを許可します。次に、すべてのファイルに、設定した所有者の読み取り/書き込み権限を設定します。
(3)(オプション)これ以降のすべての新しいファイルwww-data
が「アクセス」ユーザーとして作成されることを確認します。
sudo find /var/www/html -type d -exec chmod g+s {} +
これにより、ディレクトリ上のグループの「set gid」ビットが設定されます。これらのディレクトリ内に作成されたファイルとフォルダは常にwww-data
グループとして保持され、Webサーバーへのアクセスが許可されます。
(4)(オプション)最終的なセキュリティクリーンアップ。他のユーザーがデータを表示できないようにする場合
ディレクトリとファイルを表示するにはユーザーが必要です。そのためにはWebサーバーも必要です。他のシステムユーザー(ルートを除く)にデータを表示させたくない場合があります。そのため、ユーザーにアクセスを許可せず、ユーザーとWebサーバーのみがデータを表示できるようにします。
sudo chmod -R o-rwx /var/www/html/
注:後でこれを再実行したり、ここで権限の「その他」カテゴリの権限を編集したりする必要はありません。「他の」ユーザーがアクセスできない場合(ファイル構造とディレクトリ構造を走査する/var/www/html/
ために必要な+x
ビットが/var/www/html
なく+r
、ファイルリストを読み取るためのビットもない)、そのディレクトリの下にある他のユーザーのアイテムのアクセス許可またはグループはあまり重要ではありません。
これにはやや低侵襲的なソリューションもありますが、すべての新しいファイルで機能することは保証されていませんし、ファイルアクセス制御リストを含むすべてのファイルシステムで機能することも保証されていません。これにより、ファイルの所有権www-data
を物事に委ねることができますが、ファイルを個人的に所有していない場合でも、すべての意図と目的のために、有効な所有者の権利が与えられます。
このソリューションは少し侵襲性が低く、ディレクトリとすべてのファイルを所有しているwww-data:www-data
かroot:www-data
、自分でアクセスできるようにします。これは、使用してアクセス制御リストの個々のグループを設定せずに使用すると、複数のユーザーがアクセス権を持っています、。これにより、root
またはwww-data
システムのユーザーがファイルを所有できるようになりますが、ケースバイケースで追加のアクセス許可を追加したり、特定のユーザーのアクセス許可を微調整したりすることができます。
私たちはまだを使用し/var/www/html/
ており、私たちとシステム(そしてもちろんルート)以外のユーザーを覗き見させたくないのであれば、次のことを行う必要があります。
- 所有権をウェブサーバーシステムユーザーに戻します
www-data
。
sudo chown -R www-data:www-data / var / www / html
- 再帰的に他のユーザーを与えない(除外しつつ、あなたが、ファイルに読み取り/書き込み与える
www-data
と、root
ファイルへのアクセスを、もちろん)。
sudo find / var / www / html -type f -exec setfacl -mu:YOURUSERNAME:rw -m other :: --- {} \;
- 再帰的にディレクトリの読み取り/書き込み/トラバースを行い、他のユーザー(
www-data
およびを除くroot
)のフォルダへのアクセスを削除し、これをディレクトリ内の新しいファイルの「デフォルト」ACLとして設定します。
sudo find / var / www / html -type d -exec setfacl -d -mu:YOURUSERNAME:rwx -mo :: --- {} \;
- また
setgid
、すべてのディレクトリにビットを設定する必要があります。そのため、ファイルを作成しても、ウェブサーバーはwww-data
グループのアクセス許可を介してファイルにアクセスできます。
sudo find / var / www / html -type d -exec chmod g + x {} \;
そして今、あなたはすべてのディレクトリへのアクセス権を持っている、とあなたから離れてアクセスを取る必要はありませんでしたwww-data
、それが必要として、まだどこでもファイルを作成することができますウェブサーバとして役立ちます(PHPなどのフロントエンドは独自のキャッシュディレクトリを有し、かつ、そのようなベース適切な操作のために作成して書き込む必要があります)。
唯一の注意事項:新しいファイルを手動で作成する場合は、それに応じてそれらをchownして、Webサーバーに所有権を付与する必要があります。これは簡単なことsudo chown www-data:www-data filename
であり、アクセス制御リストを使用すると、ファイルに対する有効な所有者権限を引き続き使用できます。
特定のファイルの所有者を変更せずに、ある種の非標準アクセスのシステム管理者としてこれを行わなければならなかった場合が複数あります。これは機能しますが、すべてのファイルシステムがファイルアクセスリストをサポートしているわけではないため、独自の問題があります。
+x
ファイルへの@AndréCarvalho は実行可能アクセス許可を与えるため、PHPコマンドラインを介して、またはサーバー自体の実行可能ファイルとしてPHPファイルを実行することは望ましくありません。WebサーバーのPHPパーサーによって処理されます(そして+x
PHPパーサーがそれらを読み取って処理するためにPHPファイルを用意する必要はありません)。ディレクトリ+x
は、ディレクトリを横断することを許可するために必要です-つまり、ディレクトリが存在せず+x
、ルートでない場合、ディレクトリにアクセスできません。これは、Apacheがシンボリックリンクとホームで機能しないという問題です。ディレクトリ。