ホームディレクトリにシンボリックリンクされたApache-権限エラー


15

ホームフォルダー内の/var/www/新しいWebrootディレクトリへのシンボリックリンクにいくつかの問題があります。これらは、Linuxの許可に関する理解不足から生じていると思います。

私が知っている限りでは、シンボリックリンクはリンクしたいディレクトリとリンクしたいディレクトリの形をとるべきであるので、私の場合、私は走りました:

sudo ln -s ~/Webroot/* /var/www/

私は実行する場合、これは一種の、働いているls/var/www/私は私の中のすべてのファイルを見ることができますWebrootディレクトリ。

Webrootフォルダー内のファイルを実行しようとすると、403許可エラーが発生します。これは、Webrootディレクトリー内のファイルが私によって作成され、Apacheインスタンスがwww-dataとして実行されているためですか?

この場合、これを実行するには、作成するすべてのファイルのアクセス許可を変更する必要がありますか?

以前にローカルのApacheインスタンスを実行し、デフォルトのvhostのディレクトリルートをWebrootフォルダに向けました。このインスタンスでは、権限を変更する必要はありませんでした。任意の助けをいただければ幸いです。


apacheがシンボリックリンクをたどらないように設定されていないことを確認しました。別のフォーラムの関連スレッドはここにあるかもしれない:linuxforums.org/forum/servers/...
RobotHumans

回答:


15

これは良い習慣ではありません、Weboideに同意します。しかし、この目標を達成する簡単な方法があります。

1)。apache userdirモジュールを有効にします。

sudo  a2enmod userdir

これにより、apache userdirモジュールが有効になります。これで~/Webroot/、ホームディレクトリにWebサイトのコンテンツを配置できます。

注:デフォルトのフォルダーは ~/public_html

2)。に必要な変更を加えます /etc/apache2/mods-enabled/userdir.conf

3)。Apacheを再起動します

sudo /etc/init.d/apache2 restart

これで、ブラウザをhttp:// ip-address /〜usernameに移動して、サイトにアクセスできます。このサイトに仮想ホストを設定することもできます。

PHPファイルを実行する場合は、もう1ステップ実行する必要があります

/etc/apache2/mods-enabled/php5.conf次の行を編集してコメントします。

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

次に、Apacheを再起動します。

それでおしまい。できました。

Ref:https://wiki.ubuntu.com/UserDirectoryPHP

お役に立てれば。問題が発生した場合は、ここに投稿してください。


7

これは、あなたが望むものを達成するための良い習慣ではありません。

PHPを使用している場合は、suexecsuphpまたはphp- fpmおよびfastcgiをご覧ください


あなたはあなたの問題について正しいです、これはあなたのWebrootファイルが以外のユーザーによって所有されているという事実における許可の問題ですwww-data

以下は、問題を回避するそれほど悪くない解決策です。おそらくsudoを使用するか、rootとしてログインする必要があることに注意してください。実行するコマンドをすべて完全に理解してください!!

Webrootフォルダーとサブフォルダーとファイルを変更して、グループ所有権を設定しwww-data、適切な権限を設定します。

# set the group ownership to be www-data
chgrp -R www-data /path/to/home/Webroot/
# make sure www-data has read & write permissions (change it to `g=r` if you want to only give read-only access)
chmod -vR g=rw /path/to/home/Webroot/
# make sure www-data can access the folders by adding the group execute bit field to directories
find /path/to/home/Webroot/ -type d -print0 | xargs -0p chmod -v g+x

編集:通常のユーザーアカウントを使用してファイル/フォルダーを追加する場合は、これらのコマンドを再度実行する必要があることに注意してください。


2

Debian Lennyでもほぼ同じことをしましたが、非haxモードに変更し、Apacheを正しく構成しました。しかし、シンボリックリンクの場合:

$ ll /home
drwxr-xr-x  8 root   root   4,0K nov 14 14.59 .
drwxrwxrwx  7 root   root   4,0K nov 14 21.24 www -> /var/www

〜/ Webrootの許可を確認する必要があると思います。ディレクトリ(〜)は読み取り保護されていると思います。つまり、これを実行する必要があります。

$ ls -la /home

適切な許可を設定するには、次を使用します。

# chmod 755 /home
# chmod 755 /home/<YOURNAME>
# chown <YOURNAME>:www-data -R /home/<YOURNAME>/Webroot
# chmod 775 -R /home/<YOURNAME>/Webroot

役立つと思いますが、これについてもっと情報をください。例として、ディレクトリからWebrootを取得することをお勧めします。ホーム/ 私のような、それはセキュリティ上の問題となる可能性があるため。

「#」はルート許可を意味します。コマンドの前にsudoを書きます。「$」は単一ユーザーの許可を意味します


0

宛先だけでなく、その親に関する権限も確認する必要があります。


どうして?これはApacheの制限ですか、ファイルシステムの制限ですか?
Flimm

ごめんなさい。私は情報を確認しませんでした。個人的な経験に基づいています。
zVictor

0

この問題に直面しました。しかし、ホームディレクトリのグループをwww-dataに変更するというアイデアは好きではありませんでした。この問題は、virtualHostの構成ファイルを変更するだけで簡単に解決できます。これらを含めるようにDirectoryタグを設定するだけです

<Directory "your directory here">
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

これRequire all grantedは私が推測する新機能です。のデフォルト値を持ちますdenied

参照用のこのページを参照してくださいhttp : //httpd.apache.org/docs/current/mod/core.html#directory

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