/ var / www / htmlおよびWebサイトのドキュメントルートの自分のホームディレクトリに関する権限の問題


34

私がしようとしているではない、私の中で777の許可を与え/var/www/htmlたフォルダが、私はせずに自分のファイルを編集したいですsudo。だから私はでホームディレクトリ内のフォルダのシンボリックリンクを作成します/var/www/html。を使用して作成しsudo ln -sT /home/andre/www/moodle/ moodlels -la出力は次のとおりです。

andre@andre-270E5G:/var/www/html$ ls -la
total 8
drwxr-xr-x 2 root root 4096 Mai  4 10:20 .
drwxr-xr-x 4 root root 4096 Abr 29 14:29 ..
lrwxrwxrwx 1 root root   23 Mai  4 10:20 moodle -> /home/andre/www/moodle/

したがって、私のmoodleフォルダーには、すべてのユーザーの読み取り、書き込み、実行の許可がありますが、それは私が望むものではありません。sudo chmod -R 775 moodle/変更しようとしてコマンドを使用しましたが、すべてのユーザーに読み取り、書き込み、実行の権限が残っていました。のmoodleフォルダーで同じことを試みました/home/andre/www/moodleが、同じままでした。ls -lain の出力/home/andre/www/は次のとおりです。

andre@andre-270E5G:~/www$ ls -la
total 28
drwxrwxr-x  3 andre andre  4096 Mai  4 10:02 .
drwx------ 49 andre andre 20480 Mai  4 10:01 ..
drwxrwxr-x 41 andre andre  4096 Mai  4 10:02 moodle

したがって、フォルダmoodle/home/andre/www/は必要な権限があります。

追加の問題として、アクセスするlocalhost/moodleと403 Forbiddenエラーが発生します。

ここで何が間違っていますか?

回答:


63

ホームディレクトリ内から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

  1. Apacheがフォルダーとファイルにアクセスできるようにして、403エラーなしでサイトを提供できるようにします。
  2. ユーザーにファイルとフォルダーの「所有者」を与え、すべてのファイルとフォルダーの読み取り/書き込みを許可し、ディレクトリを走査する機能を与えます。
  3. (オプションだが推奨)ここからディレクトリ構造全体で作成されたファイルまたはフォルダのグループがに設定されるように設定しますwww-data
  4. (オプション)最終セキュリティクリーンアップ。ユーザーと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-dataroot:www-data、自分でアクセスできるようにします。これは、使用してアクセス制御リストの個々のグループを設定せずに使用すると、複数のユーザーがアクセス権を持っています、。これにより、rootまたはwww-dataシステムのユーザーがファイルを所有できるようになりますが、ケースバイケースで追加のアクセス許可を追加したり、特定のユーザーのアクセス許可を微調整したりすることができます。

私たちはまだを使用し/var/www/html/ており、私たちとシステム(そしてもちろんルート)以外のユーザーを覗き見させたくないのであれば、次のことを行う必要があります。

  1. 所有権をウェブサーバーシステムユーザーに戻しますwww-data
sudo chown -R www-data:www-data / var / www / html
  1. 再帰的に他のユーザーを与えない(除外しつつ、あなたが、ファイルに読み取り/書き込み与えるwww-dataと、rootファイルへのアクセスを、もちろん)。
sudo find / var / www / html -type f -exec setfacl -mu:YOURUSERNAME:rw -m other :: --- {} \;
  1. 再帰的にディレクトリの読み取り/書き込み/トラバースを行い、他のユーザー(www-dataおよびを除くroot)のフォルダへのアクセスを削除し、これをディレクトリ内の新しいファイルの「デフォルト」ACLとして設定します。
sudo find / var / www / html -type d -exec setfacl -d -mu:YOURUSERNAME:rwx -mo :: --- {} \;
  1. また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であり、アクセス制御リストを使用すると、ファイルに対する有効な所有者権限を引き続き使用できます。

特定のファイルの所有者を変更せずに、ある種の非標準アクセスのシステム管理者としてこれを行わなければならなかった場合が複数あります。これは機能しますが、すべてのファイルシステムファイルアクセスリストをサポートしているわけではないため、独自の問題があります。


2
+xファイルへの@AndréCarvalho は実行可能アクセス許可を与えるため、PHPコマンドラインを介して、またはサーバー自体の実行可能ファイルとしてPHPファイルを実行することは望ましくありません。WebサーバーのPHPパーサーによって処理されます(そして+xPHPパーサーがそれらを読み取って処理するためにPHPファイルを用意する必要はありません)。ディレクトリ+xは、ディレクトリを横断することを許可するために必要です-つまり、ディレクトリが存在せず+x、ルートでない場合、ディレクトリにアクセスできません。これは、Apacheがシンボリックリンクとホームで機能しないという問題です。ディレクトリ。
トーマスウォード

1
@AndréCarvalho www-data標準ユーザーが中であるためには、グループではありません-システムグループがある。
トーマス・ウォード

1
@JunaidQadirShekhanzai人々の設定は必要な環境や他の多くの要因と大きく異なるため、提供することは不可能です。オプションのコンポーネントがある場合、このような「シェルファイル」を作成することはできません。私は可能性がしようとし、これを行うことができますPythonスクリプトを作成し、我々はまだシステムの制限、オプションのタスク、様々なパス、などのようなものに遭遇
トーマス・ウォード

1
@ T.Toduaそれは私が言ったことではありません。「ホーム」ディレクトリからサイトを実行しないください(読み取り:内部から)つまり/home/USER/...、Webサーバーでは何も実行しないでください。あなたは私が使う言葉の意味を誤解し、誤解しました。 /var/www/*は専用のフォルダ/スペースであるため、ウェブサイトを実行するのに比較的「安全な」場所です。ただし、/var/www/htmlインストール時などにWebサーバーによって書き込まれ、重要なデータの破壊につながるため、安全ではありません(/var/www/SUBDIRECTORY代わりに個々のサイトのサブディレクトリで使用します)
Thomas Ward

1
わかりやすくするために文言を調整しました。
トーマスウォード

2

許可の問題を解決するためにシンボリックリンクを使用するという考え全体に欠陥があり、機能しません。シンボリックリンク自体に表示される権限はほとんど無関係であり、「実」ディレクトリの権限を回避するために使用することはできません。から/var/www/html/moodleへのシンボリックリンクを作成し/home/andre/www/moodle/ても、の権限は回避されません/home/andre/www/moodle/。に/var/www/html/moodle必要な権限を持っている場合にのみ、何かをしたい人はそうすることができ/home/andre/www/moodle/ます。

の実行はsudo chmod -R 775 moodle/実際に効果がありましたが、シンボリックリンクの許可を変更するのではなく、シンボリックリンクターゲットの許可を変更したと思っていたものとは異なります/home/andre/www/moodle/

Webサーバーで403エラーが発生するのは、おそらくWebサーバーに必要なアクセス許可がないため/home/andreです。これは「追加の問題」ではなく、同じ権限の問題によるものです。

そのため、シンボリックリンクを使用する代わりに、ファイルとWebサーバーを編集してそれらにアクセスする(または、アプリケーションに応じて編集することもできる)アクセス許可を把握する必要があります。正確にこれらのアクセス許可が何であるかは、使用事例(アプリケーションとサーバーの構成)によって異なります。

一般に、ファイルを所有し、rwアクセス許可を持ち、Webサーバーはグループアクセス許可を介してファイルへの読み取りアクセスのみを持ち、他のすべてのユーザーはアクセス権をまったく持たないことをお勧めします。

許可の例(情報が不足しているため、ユースケースでは機能しない場合があります):

andre@fermat:/var/www/html$ ls -al moodle/
total 0
drwxr-x--- 2 andre www-data 60 mai  4 16:20 .
drwxr-xr-x 3 root  root     80 mai  4 16:20 ..
-rw-r----- 1 andre www-data  0 mai  4 16:20 index.html

ディレクトリには、所有者がディレクトリを入力してそのコンテンツを変更するのに十分なアクセス権があることがわかり、(グループ内のwww-data)Webサーバーが入力および読み取りできます。ファイル自体は、ユーザー(所有者)が読み取りおよび書き込み可能で、Webサーバー(グループ内www-data)が読み取り可能です。他のすべてのユーザーはアクセスできません。

繰り返しますが、これは例としてのみ使用してください。Webサーバーの正確なユーザー/グループは、構成によって異なります。そして、あなたのアプリケーション(moodle)は異なるパーミッションを必要とするかもしれません、あなたはそのドキュメントを調べなければなりません。


同意しましたが、アクセス許可を正しく設定する方法がわからない場合、これはあまり役に立ちません。また、他の問題も発生します。
トーマスウォード

@ThomasW .:パーミッションを適切に設定する方法の質問は、ウェブサーバーの設定、ファイルを編集する望ましい方法、アプリケーションのニーズなどの必要な情報を含む新しい質問である必要があります。
マストフ

または正しい答えとして書かれている-私は今やっている。ウェブサイトの/ home / USER /からも何も実行しないでください。ウェブサーバーに正しくパッチが適用または設定されていない場合、他の多くの「ユーザー」データにアクセスできます。
トーマスウォード

@mastovわかった。あなたはあなたの説明で私が持っていた多くの質問を解決します。
アンドレカルヴァ

2

トーマス・ワードによる優れた回答 https://askubuntu.com/a/767534/717860

8つのコマンドの代わりに、わずか3つのコマンドですべての推奨手順を実行できます。

3つのコマンド:

sudo chown -R ubuntu:www-data /var/www
sudo find /var/www -type d -exec chmod 2750 {} \+
sudo find /var/www -type f -exec chmod 640 {} \+

次の8つのコマンドと同じ作業を行います。

sudo chgrp -R www-data /var/www
sudo find /var/www -type d -exec chmod g+rx {} +
sudo find /var/www -type f -exec chmod g+r {} +
sudo chown -R ubuntu /var/www/
sudo find /var/www -type d -exec chmod u+rwx {} +
sudo find /var/www -type f -exec chmod u+rw {} +
sudo find /var/www -type d -exec chmod g+s {} +
sudo chmod -R o-rwx /var/www/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.