Linux – How to fix permission denied error on any document on website

apache-2.2linuxUbuntuWordpress

So, I've been trying to setup WordPress for a while now (so much for their 5min install claim) and have just gotten stuck. No matter what, I just get:

Forbidden

You don't have permission to access /wordpress/ on this server.

When I look at the /var/www/wordpress directory, I see:

# ls -l
total 276
-rw-r----- 1 www-data www-data   397 2008-05-25 20:33 index.php
-rw-r----- 1 www-data www-data  7669 2011-02-15 17:48 readme.html
drw-r----- 8 www-data www-data  4096 2012-03-05 20:55 wp-admin
-rw-r----- 1 www-data www-data 40400 2009-10-25 10:32 wp-app.php
-rw-r----- 1 www-data www-data   220 2008-10-14 06:22 wp-atom.php
-rw-r----- 1 www-data www-data   274 2008-05-25 15:50 wp-blog-header.php
-rw-r----- 1 www-data www-data  3928 2010-01-07 19:38 wp-comments-post.php
-rw-r----- 1 www-data www-data   238 2008-10-14 06:22 wp-commentsrss2.php
lrwxrwxrwx 1 www-data www-data    28 2012-03-05 20:55 wp-config.php -> /etc/wordpress/wp-config.php
-rw-r----- 1 www-data www-data  2616 2009-12-08 19:59 wp-config-sample.php
drw-r----- 5 www-data www-data  4096 2012-03-05 20:55 wp-content
-rw-r----- 1 www-data www-data  1253 2009-08-16 04:59 wp-cron.php
-rw-r----- 1 www-data www-data   220 2008-10-14 06:22 wp-feed.php
drw-r----- 6 www-data www-data  4096 2012-03-05 20:55 wp-includes
-rw-r----- 1 www-data www-data  1946 2009-05-05 19:43 wp-links-opml.php
-rw-r----- 1 www-data www-data  2341 2009-05-20 16:32 wp-load.php
-rw-r----- 1 www-data www-data 22859 2011-02-15 17:48 wp-login.php
-rw-r----- 1 www-data www-data  7578 2009-09-18 20:43 wp-mail.php
-rw-r----- 1 www-data www-data   487 2009-04-20 21:50 wp-pass.php
-rw-r----- 1 www-data www-data   218 2008-10-14 06:22 wp-rdf.php
-rw-r----- 1 www-data www-data   316 2008-05-25 15:50 wp-register.php
-rw-r----- 1 www-data www-data   220 2008-10-14 06:22 wp-rss2.php
-rw-r----- 1 www-data www-data   218 2008-10-14 06:22 wp-rss.php
-rw-r----- 1 www-data www-data 23097 2009-12-14 00:38 wp-settings.php
-rw-r----- 1 www-data www-data  3693 2009-11-26 11:29 wp-trackback.php
-rw-r----- 1 www-data www-data 93445 2009-12-01 08:14 xmlrpc.php

So, www-data owns all these files. So, then I was thinking maybe apache isn't running as www-data? So I did:

# ps -A | grep apache
22511 ?        00:00:00 apache2
22513 ?        00:00:00 apache2
22514 ?        00:00:00 apache2
22515 ?        00:00:00 apache2
22516 ?        00:00:00 apache2
22517 ?        00:00:00 apache2

So, I guess apache is running as nobody? If I look at apache2.conf I see:

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

And in envvars I have:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid

So, I'm totally stuck! Any ideas?

UPDATE:

Oh, also a tail from the error.log gives me:

[Mon Mar 05 22:29:17 2012] [error] [client x.x.x.x] (13)Permission denied: access to /wordpress/index.html denied
[Mon Mar 05 22:29:17 2012] [error] [client x.x.x.x] (13)Permission denied: access to /wordpress/index.cgi denied
[Mon Mar 05 22:29:17 2012] [error] [client x.x.x.x] (13)Permission denied: access to /wordpress/index.pl denied
[Mon Mar 05 22:29:17 2012] [error] [client x.x.x.x] (13)Permission denied: access to /wordpress/index.php denied
[Mon Mar 05 22:29:17 2012] [error] [client x.x.x.x] (13)Permission denied: access to /wordpress/index.xhtml denied
[Mon Mar 05 22:29:17 2012] [error] [client x.x.x.x] (13)Permission denied: access to /wordpress/index.htm denied

Update 2:

My sites-available default says:

xxx:/etc/apache2/sites-available# cat default
<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/
    ExpiresActive On

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
        ExpiresDefault A300
        ExpiresByType text/css "access plus 1 month"
        ExpiresByType text/javascript "access plus 1 month"
        ExpiresByType application/javascript "access plus 1 month"
        ExpiresByType image/gif "access plus 1 month"
        ExpiresByType image/jpg "access plus 1 month"
        ExpiresByType image/jpeg "access plus 1 month"
        ExpiresByType image/png "access plus 1 month"

        RewriteEngine On
    </Directory>

    ErrorLog /var/log/apache2/error.log

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

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

Sites-enabled just has 000-default pointing to that.

Best Answer

Try going up a directory, and then make sure that your user has permission to execute into wordpress. i.e. :

cd ..
vdir | grep wordpress