Apacheがホームディレクトリ内のフォルダーにアクセスできない


29

ホームディレクトリ内のフォルダを指すようにApacheの構成を変更しました。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/dbugger/html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dbugger/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/home/dbugger/html777の許可を与えました。しかし、http://localhost「403 Forbidden」で同じエラーメッセージが引き続き表示されます。

私が行方不明になっているのは何ですか?


何について/home/dbuggerの許可?
エリックカルヴァ

777をホームフォルダー全体にする必要があるということですか?それは無理のようです。777をhtmlにすることは安全な解決策ではありません。私は問題の根本を特定しようとするだけです。
エンリケモレノテント

1
apacheはユーザーwww-dataとして実行されます。そのユーザーが自宅で実行権限を持っていない場合、Apacheはファイルを読み取ることができません。
エリックカルヴァ

ホームフォルダへの完全なアクセスを提供するために、ホームディレクトリのサブフォルダをwww-data wihtoutに追加する方法はありませんか?そのロジックに従うと、/ homeへのアクセス権を付与する必要があるため、すべてのHOMEフォルダーへのアクセス権も付与する必要があるように思われます。多すぎるようです
エンリケモレノテント

回答:


25

これは私のために働いた

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Allow from all
</Directory>

重要なのは変更することでした

Order allow, deny

Require all granted 

私は許可を変更する必要はありません、私の時間を節約する
khaled_webdev

こんにちは、私は、それはあなたを助けていることがうれしい
szydan

3
私がいた、それはの「新しい同等」であることを発見し、「すべての付与が必要な」何を見上げるの自由ましたAllow from all-以降のApache 2.4からserverfault.com/questions/549517/...
Programster

8
いいえ、ルート全体へのアクセスを許可することは決して良い考えではありません!
bjunix 14

9
ルートディレクトリAllowOverrideAllに設定するのは、せいぜい無謀です!詳細については、httpd.apache.org / docs / 2.4 / mod / core.html#allowoverrideを参照してください。
ボンベ

19

userdirモジュールを有効にする:

sudo a2enmod userdir 

ユーザーディレクトリでPHPの実行を有効にします。

sudo nano /etc/apache2/mods-available/php5.conf  

(または、たとえばphp7.0を使用している場合)

sudo nano /etc/apache2/mods-available/php7.0.conf

この部分をコメントにします(#各行の先頭に置きます):

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>

Ctrl+ Xを押して保存します

ディレクトリリストを有効にします。

sudo nano /etc/apache2/apache2.conf

これを追加:

<Directory /home/*/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Ctrl+ Xを押して保存します


Apacheを再起動します(sudoここでも必要です):

sudo service apache2 restart

ここで、PHPファイルを/home/yourname/public_htmlディレクトリに配置
http://localhost/~yournameし、Webブラウザからアクセスします。


11

Apacheはuserとして実行されますwww-data。あなたのホームで実行許可がない場合、Apacheはファイルを読み取ることができません。

自宅のグループをwww-data次のように変更します。

chgrp www-data /home/dbugger

そして、ホームディレクトリをたどるだけの許可を与えます:

chmod g+x /home/dbugger

次の権限を制限することもできます/home/dbugger/html

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html

それを行うことはできますが、代わりに/home/dbugger使用し/home/dbugger/htmlますか?
エンリケモレノテント

/home/dbugger/html777の代わりにそのアクセス許可を適用することもできますが、ユーザーwww-dataがcd自宅にアクセスできない場合、ファイルまたはサブフォルダーにアクセスできないことに注意する必要があります。したがって、自宅の許可がrwx------ dbugger:dbuggerapacheの場合、自宅内のどのファイルにもアクセスできません。アクセスを少し制限したくない場合はchmod g+x /home/dbugger、実行許可()だけを与えてみてください。よくわかりませんが、うまくいくと思います。
エリックカルヴァ

申し訳ありませんが、どちらのソリューションも機能しませんでした:
エンリケモレノテント

chgrp www-data /home/dbugger@DavidGreene方式との組み合わせで、それは私のために働いてしまった
ローラン・

ユーザーグループをapacheユーザー(www-data)に追加することもできますsudo usermod -a -G dbugger www-data。その後、apacheを再起動する必要があります。
TIIUNDER

1

ホームディレクトリを使用して開発環境をホストする場合、少なくとも一部のアプリケーションの書き込み権限が必要な場合、権限を変更する必要はありません。apache mod_userdirモジュールが必要です。仮想ホストを使用するためにhttp://domain.local/~user_name/dir_name/ *のように/ home / user_name / public_html / *にアクセスし、必要なmod_userdirモジュールを使用してsymを作成します。このようなリンク:

$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/
$ sudo service apache2 restart

5
また使用できますa2enmod userdir
ジョリル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.