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的访问权限一样。这似乎太多了
Enrique Moreno帐篷

Answers:


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 2014年

3
我注意到查找什么“要求所有授予”是,发现它是“新的等效”的自由,Allow from all从阿帕奇2.4起- serverfault.com/questions/549517/...
Programster

8
不,授予访问整个根目录的权限绝不是一个好主意!
bjunix 2014年

9
目录上设置AllowOverride为最好是鲁ck的!有关详细信息,请参见httpd.apache.org/docs/2.4/mod/core.html#allowoverrideAll
孟买

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以用户身份运行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,而不是777,但是要记住,如果用户www-data无法cd访问您的家,它将无法访问任何文件或子文件夹。因此,如果您的家中权限是rwx------ dbugger:dbuggerapache,则将无法访问您家中的任何文件。如果您不想稍微限制访问权限,可以尝试仅授予执行许可权(chmod g+x /home/dbugger),但不确定,但是我认为它是可行的。
埃里克·卡瓦略

抱歉,但是这些解决方案均无效:(
Enrique Moreno Tent

chgrp www-data /home/dbugger与@DavidGreene方法组合得到它的工作对我来说
洛朗

也可以将您的用户组添加到apache用户(www-data)中sudo usermod -a -G dbugger www-data,之后您需要重新启动apache。
TIIUNDER

1

如果要使用主目录托管开发环境,则不需要更改权限,至少您需要对某些应用程序具有写权限。您需要apache mod_userdir模块,并且可以访问/ home / user_name / public_html / *这样的http://domain.local/~user_name/dir_name/ *以使用虚拟主机,要使用mod_userdir模块,您需要创建一个符号像这样的链接:

$ 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
Joril 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.