Apache Userdir with SELinux on Fedora 23/22, CentOS/RHEL 7.2/6.7/5.11

This is quick guide howto enable Apache userdirs with SELinux on Fedora 23/22/21/20/19/18, CentOS 7.2/6.7//5.11 and Red Hat (RHEL) 7.2/6.7/5.11. This guide assumes that you have Apache (httpd) server installed on your system. This guide uses separeted userdir.conf without touching httpd.conf so later default httpd.conf can be overrided or whole configuration moved simply. This guide uses user called testuser and should be replaced by real user name(s).

Enable Apache Userdirs

1. Change root user

2. Create /etc/httpd/conf.d/userdir.conf file

Open file, with our favorite editor, like:

Add something like following content to file:

And save file.

To allow a few users to have UserDir directories, but not anyone else, use the following:

To allow most users to have UserDir directories, but deny this to a few, use the following:

3. Start/Restart Apache (httpd)

4. Create public_html directory/directories

Make public_html directory/directories on user/users home dirs.

5. Change the correct permissions to home and public_html directories

6. Set proper SELinux settings for Apache homedirs (httpd_enable_homedirs)

Looks like older SELinux versions needs also following (example CentOS and Red Hat):

Test Enabled Apache Userdir

Go to url http://localhost/~testuser/

Should look something like following:
Testuser Apache Homedir

Test HTML and PHP under Apache Userdir

Create following files ~/public_html/test.html and ~/public_html/test.php
~/public_html/test.html content

~/public_html/test.php content

Reload browser:
Testuser Apache Userdir Test Files Added

Check test files:
Testing apache Userdir
Testing Apache Userdir PHP

Share this post


  1. Dear JR,

    Your guides save me a lot of time. Thank you very much.

    I’m following your guide to set up WordPress on my laptop with Fedora 16.

    In Step 6 of this post (‘Apache Userdir with SELinux’), i got an error:

    setsebool -P httpd_enable_homedirs true
    libsemanage.semanage_get_lock: Could not get direct transaction lock at /etc/selinux/targeted/modules/semanage.trans.LOCK. (Resource temporarily unavailable).
    Could not change policy booleans

    This may results that http://localhost/~testuser/ is ‘Not Found’.

    Could you help me to deal with this error or should i just skip it if i could setup WordPress anyway?

    Best Regards

  2. This article was a tremendous help!! After spending about 4 hours trying to get Fedora 16 php set up to work, I found this article and resolved my issues. Many, many thanks!!

  3. I’ve read and follow the all tutorial step from step and get a 404 Error every time I want to access a user dir. I created three users: guillermo, reynierpm and tomas and inside each home create a directory public_html, set the proper permissions and run the commands one by one but didn’t know why isn’t working. The ouput of command running above by others is this:

    [root@devserver ~]# sed ‘/^ *#/d;s/#.*//’ /etc/httpd/conf.d/{php,userdir}.conf

    LoadModule php5_module modules/libphp5.so

    LoadModule php5_module modules/libphp5-zts.so

    AddHandler php5-script .php
    AddType text/html .php

    DirectoryIndex index.php

    UserDir enabled guillermo reynierpm tomas

    Options Indexes Includes FollowSymLinks

    AllowOverride All
    Allow from all

    Order deny,allow

    Any help?
    Cheers and thanks in advance

    • Hi,

      Could you tell your Linux distro?

      Do you get any SELinux errors, when you try to access userdir?

      Could you post output of following commands:

  4. nevermind was my bad, I miss the parameter “UserDir public_html” under IfModule directive. Also I notice that I can write the same in two flavours, one is the suggested by you in the post and the second one is what I’m using right now ins including the directive Directory inside the IfModule so my userdir.conf is as follow:

    UserDir enabled testuser
    UserDir public_html

    Options Indexes Includes FollowSymLinks

    AllowOverride All
    Allow from all

    Order deny,allow

    Cheers and thanks for your time

  5. hi, i can’t access dir in my root direcotory..
    i follow all tutorial in this web, but i have problem..
    when i using this CLI

    my OS show message

    and when i using

    my system show message :
    chcon: can’t apply partial context to unlabeled file

    please help me, i’am sory if my english is bad. i’am from Indoneisa :D

  6. I have tried everything and I am getting Forbidden 403: You don’t have permission to access /~testfolder/ on this server.

    I have tried everything. This worked when I was using Fedora17, but I did a clean install of F18, and this is driving me crazy… I ALREADY CHANGED PERMISSIONS wtf…. so frustrating…

    • Reply
    • This is where it works, in the default directories (/var/www/html)

      • Hi B,

        Sorry it take a while to check this. I updated this configuration working better with Apache 2.4, so try following config instead:

        Then restart Apache and try again. Is it working then?

    • Hi Xavier,

      Yes this is possible, you can just set that address to /etc/hosts file (pointing to right ip address) and add same address to your apache virtual host, like following:

  7. Ok, then I have to setup a virtual for each user? Is there a way to setup apache to read the testuser in the url and redirect it to his specific userdir, so when a testuser02 is created his url http://testuser02.project.net is automatically redirected to his own userdir?

    • Hi Xavier,

      You can do this first catching all subdomains with your virtual host, like:

      Then create .htaccess with something like following content:

      Another way is setup virtual hosts for each user, example using some simple bash script, which create folders and virtual host files.

  8. I got everything working I just can’t get it to abide by my modrewrite rules set by the .htacess file, this is my userdir.conf

    • Hi Matthew,

      Simply add AllowOverride FileInfo line to your userdir.conf:

      And then restart apache:

  9. Thanks a lot !!! =D

  10. Thanks for the setsebool command. That is what solved my problem. I have used Apache for many years and this was the only time I needed to use this command.

  11. Great tutorial! But I have to add the following in my /etc/httpd/conf.d

    Fault in the

    System: CentOS 6.5 / Apache 2.2

  12. I run on centos 6.5 and got this message:

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.

    Apache/2.2.15 (CentOS) Server at Port 80

  13. I store my web content in an external NTFS device, and it turns out that NTFS can’t be mounted with a provided context (bug: https://bugzilla.redhat.com/show_bug.cgi?id=631616). So in my case I needed to:

    1) mount the device w/ group/owner set to me: –options defaults,auto,uid=1000,gid=1000,umask=002
    2) needed to set read/exec permissions on /home/me

  14. I am getting a 404 error


Submit a Comment

Your email address will not be published. Required fields are marked *