権限の問題:Apacheはどのようにホームディレクトリ内のファイルにアクセスできますか?


33

以前、ファイルのアクセス許可についてはここで説明しましたが、私のシナリオの概念を理解するのに苦労しています。

  • 古いubuntuインストールでファイルを作成しました。
  • ファイルを新しいubuntuインストールにコピーし、webrootに配置しました。
  • ファイル(PHPファイル)を実行しようとすると、アクセス許可に関するエラーが表示されます

これを修正する試みで、私はそれらがまだ前の所有者によって所有されている必要があると仮定したのでchown -R、ディレクトリ内のすべてのファイルの所有権を取得するために、引数としてユーザー名でディレクトリを実行しました。新しいUbuntuインストールと古いUbuntuインストールのユーザー名は同じであることに注意してください。

ファイルを再度実行しようとすると、同じ問題:アクセス許可の問題による500エラー。誰が私がとるべき他のステップを教えてもらえますか?

ApacheインストールのWebルートはホームフォルダー内にあります。Webルートに新しいファイルを作成した場合、それらは期待どおりに機能します。問題を引き起こしているのは古いファイルのみです。


ファイルがコピーされたときにファイルのアクセス許可がコピーされるかどうかわかりませんが、誰かがそれを確認できますか?それ以外の場合、ファイルを他のユーザー(またはルート)に渡し、それらを再利用することは可能でしょうか?
タガー

OK、ファイルが実行されないという問題を解決しましたが、問題のchmod -R 777 dirディレクトリで実行するだけで解決しました。私はそれを行うより良い方法があると考えるのを助けることができません
-richzilla

3
ファイル内の777権限により、誰でもファイルを書き込むことができるため、ページが破損したりハッキングされたりする可能性があります。通常phpファイルに使用される755を試してください。ファイルの「実行を許可」を有効にする必要がないことを確認してください。この場合、chmod [filename] -xを実行できます。次のリンクをクリックすると、chmodコマンドに関する情報にアクセスできます:catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo

Apacheエラーログには何が表示されますか?
キーズクック

回答:


14

webroot上のディレクトリには、Apacheがディレクトリに降りることを許可する実行ビットが設定されている必要があります。

あなたがにあるWebルートを持っている場合は/home/user/htdocs//home/home/userおよび/home/user/htdocs実行ビットセットを持っている必要があります。


上記のソリューションは「機能します」が、理想的ではありません。フォルダーを作成した場合、Apacheはそのフォルダーに書き込むことができません。その逆も起こります。

これは、umask 0007を設定し、Apacheグループ(私が間違っていない場合はwww-data)に自分自身を追加することで「修正」できます。その結果、新しく作成されたファイルとフォルダーはグループによって書き込み可能です。

または、代替のApache MPM:Apache2 MPM ITK構成に関する情報)をインストールし、Apacheがユーザーの下で実行されるように構成を調整できます。


これを具体化する方法の明示的な指示については、以下の
ホブ

2
@hobsさらに良い、askubuntu.com
a

44

サーバー文書が/home/$USER/public_htmlディレクトリにある場合は、実行する必要があります

sudo chown -R www-data:www-data /home/$USER/public_html

DocumentRootフォルダーの所有権をユーザーwww-dataとグループに付与しますwww-data

その後、自分をグループに追加できます www-data

sudo adduser $USER www-data

最後に、所有者(www-dataユーザー)と自分(www-dataグループの一部)がDocumentRootフォルダーを書き込み可能にする必要があります。

sudo chmod -R 775 /home/$USER/public_html

便宜上public_html_fix.sh、コンテンツで名前を付けたスクリプトを作成できます。

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

内部に保存し/home/$USER/bin、次を使用して実行可能にします。

sudo chmod +x /home/$USER/bin/public_html_fix.sh

次に、必要なときにいつでも呼び出します。ファイルシステムのどこからでも、次のようになります。

public_html_fix.sh

1
....私のために働いた
エマニュエルOkeke

すばらしい回答です!-例と便利なスクリプト、さらには使用/インストールの方法がすばらしい!
アンドレ

2
これが共有ホストで行われている場合、www-dataグループ内の他のユーザーがファイルを読んだり、書き込みを行ったりすることをどのように停止しますか?
jozxyqk

本当に素晴らしい答え...あなたは私の人生を救った
NullPoiиteя

1
chmod -R 775 /home/$USER/public_html本当にひどい。find /home/$USER/public_html -type d -exec chmod 775 {} \;そしてfind /home/$USER/public_html -type f -exec chmod 664 {} \;はるかに良いです
-iharob

1

ファイルをchmodしてapache .confファイルを編集することは別として、nautilusを介して自動マウントされたパーティションにファイルがあったため、何も機能しなかったと言いたいです。これにより、ユーザーのパーティションのみが制限されます。

ファイルがwww-rootapacheで表示されているかどうか、またはユーザーがapacheを実行ps -aux | grep apache2しているかどうかを確認するには(実行して確認)、次のコマンドを実行します。

sudo su -l www-data -s /bin/bash

そして、ドキュメントルートからファイルを読み取ろうとします。

ファイルが読めない場合は、次のことを確認してください。

1)他のすべてのファイル許可を設定しました

2)必要に応じFollowSymlinks.confファイルで使用した

3)DocumentRootをセットアップしました

3)すべてのユーザー用にパーティションをマウントします。/etc/fstabUUID を使用してパーティションを編集および指定する必要がありました。

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

次に、nautilusを使用してパーティションをアンマウントし、実行しsudo mount -aます。すべてうまくいけば、ファイルはの下にあり/mntます。シンボリックリンクを更新すると、準備完了です。


1

私がこれを常に設定するために見つけた最良の方法は、VirtualMinがそれを行う方法です。

ユーザーとグループ「myhome」を作成します

apacheユーザーをグループ「myhome」のメンバーにします。ここにある説明の一部のような他の方法ではありません

したがって、apacheは/ home / myhome / wwwに加えて/ home / myhomeへの読み取りおよび実行アクセス権を持ちます。

「myhome」ユーザーには書き込みアクセス権があります


私はこの概念が好きですが、それは私のために働いていないようです。ユーザーwww-dataはグループに属しmyhomeます。すべてのファイルとディレクトリにはグループ書き込み権限があり、に属しmyhome:myhomeます。Apacheを再起動しました。Apacheは、まだ新しいファイルやフォルダーを書き込むことができません。(www-data:www-dataユーザー/グループを使用したPHPスクリプト)
squarecandy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.