Apache Userdir with SELinux on Fedora 16/15, CentOS/RHEL 6.2/5.7
This is quick guide howto enable Apache userdirs with SELinux on Fedora 16/15/14/13/12, CentOS 6.2/6.1/6/5.7 and Red Hat (RHEL) 6.2/6.1/6/5.7. 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
su - ## OR ## sudo -i
2. Create /etc/httpd/conf.d/userdir.conf file
Open file, with our favorite editor, like:
nano -w /etc/httpd/conf.d/userdir.conf
Add something like following content to file:
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # UserDir enabled testuser # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disabled" line above, and uncomment # the following line instead: # UserDir public_html </IfModule> <Directory /home/*/public_html> Options Indexes Includes FollowSymLinks AllowOverride All Allow from all Order deny,allow </Directory>
And save file.
Note:
To allow a few users to have UserDir directories, but not anyone else, use the following:
UserDir disabled UserDir enabled testuser1 testuser2 testuser3
To allow most users to have UserDir directories, but deny this to a few, use the following:
UserDir enabled UserDir disabled testuser4 testuser5 testuser6
3. Start/Restart Apache (httpd)
/etc/init.d/httpd start ## OR ## /etc/init.d/httpd restart
4. Create public_html directory/directories
Make public_html directory/directories on user/users home dirs.
mkdir /home/testuser/public_html
5. Change the correct permissions to home and public_html directories
## home directory ## chmod 711 /home/testuser ## public_html directory ## chown testuser:testuser /home/testuser/public_html chmod 755 /home/testuser/public_html
6. Set proper SELinux settings for Apache homedirs (httpd_enable_homedirs)
setsebool -P httpd_enable_homedirs true
Looks like older SELinux versions needs also following (example CentOS and Red Hat):
chcon -R -t httpd_sys_content_t /home/testuser/public_html
Test Enabled Apache Userdir
Go to url http://localhost/~testuser/
Should look something like following:

Test HTML and PHP under Apache Userdir
Create following files ~/public_html/test.html and ~/public_html/test.php
~/public_html/test.html content
<html> <head> <title>Testing Apache Userdir</title> </head> <body> <h1>Testing Apache Userdir!</h1> </body> </html>
~/public_html/test.php content
<?php phpinfo(); ?>
Related posts:
- LAMP on Fedora 16/15, CentOS/Red Hat (RHEL) 6.2/5.7 – (Linux, Apache, MySQL, PHP)
- Install Apache/PHP 5.3.10 on Fedora 16/15, CentOS/Red Hat (RHEL) 6.2/5.7
- Install WordPress 3.3.1 on Fedora 16/15, CentOS/RHEL 6.2/5.7
- Install Nginx/PHP-FPM on Fedora 16/15, CentOS/RHEL 6.2/5.7
- Install SVN (Subversion) Server on Fedora 16/15, CentOS/Red Hat (RHEL) 6/5.7
23 Comments
Leave a Comment
Trackbacks/Pingbacks
- Apache Userdir with SELinux on Fedora 13, CentOS 5.5, Red Hat … « apache - [...] Pełny artykuł na: Apache Userdir with SELinux on Fedora 13, CentOS 5.5, Red Hat … [...]
- Activar Apache Userdir para Fedora 15, Centos5.5 y Red Hat Linux 6 « The Beatech - [...] Fuente: if-not-true-then-false [...]



Nice one, there are actually some good facts on this post many of my subscribers just might find this useful, I will send them a link, thank you
Works! Nice :)
I found out that if I set UseCanonicalName On in /etc/httpd/conf/httpd.conf – apache is changing localhost in the browser to the ServerName specified in httpd.conf and the pages in ~/public_html are not loading at all. So I set UseCanonicalName Off again :)
Best,
Jozsef
Or else,
It could be fixed in /etc/hosts by adding:
127.0.0.1 nameOFtheSERVER
:)
Best,
Jozsef
I follow your step html is working but php just show me blank screen.
Is there any light on how and why?
Best!
Fhon
Hi Fhon,
Is your PHP working on any other dir?
Is it working example on /var/www/html dir?
Hi JR,
Php is working on /var/www/html
but not /home/user/public_html
When try to access test.php file it just show download the file.
Run test.html work show the page without problem.
Best!
Fhon
Hi again Fhon,
A few additional questions.
What operating system (and version) are you using?
Did you execute following command?
Post following commands output:
Hello,
I have the same problem as Fhon
and here is my output for those commands:
userdir.conf didn’t exists because I enable the mod directly from httpd.conf, and here is the configuration for userdir:
AllowOverride All Options MultiViews Indexes FollowSymLinks Includes Order allow,deny Allow from alland here is output from ls command:
Is there something wrong with my configuration?
Hi Adods,
Is PHP working normally on /var/www/html directory?
Is HTML files working normally from user directory?
Could you post your full httpd.conf file and full path of your Apache userdir what you are using?
Great Tutorials, thanks you.
On Fedora 14 I had to :
setsebool -P httpd_read_user_content 1
Hi JR,
I’m running Fedora 14
I followed this tutorial to first install mysql, and then to install Apache (httpd) with php, the PHP test page creation succeed but not the last test remote connection.
And also while enabling Apache Userdir i couldn’t succeed and got this error in the browser: “Not Found
The requested URL /~testuser/ was not found on this server.
Apache/2.2.17 (Fedora) Server at localhost Port 80″
Please help i’m a new user.
Thanks!
Hi Doufanat,
What problems you have with remote connections? Do you opened iptables firewall port? Or are you behind some other firewall?
Do you actually have testuser with home dir on your Linux? Could you check your apache error_logs and post last errors here when you try to access testuser dir?
Hi,
I have some access problem
[root@Xia Xia]# chown testuser:testuser /home/testuser/public_html
chown: invalid user: `testuser:testuser’
[root@Xia Xia]# chmod 755 /home/tesuser/public_html
chmod: cannot access `/home/tesuser/public_html’: No such file or directory
[root@Xia Xia]#
Need help please
Hi,
So it looks like, that you don’t have testuser. I used this testuser just an example here…so if your username is example doufanat then you should use doufanat instead of testuser.
Hi JR
Thanks a lot, I’ve finished enabling Apache userdirs and it succeed, but the problem with the test remote connection till remain.
How to check my Apache error_logs? how to check either the port is open or not.
Best
Hi Doufanat,
Actually you don’t need Apache error_logs anymore if yoy get userdirs working… :)
First check, you could run following command:
iptables -LThen next thing is ensure that you have own and public ip address?
Hi JR
This is result of iptables -L
[root@Xia Xia]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp — anywhere anywhere
ACCEPT all — anywhere anywhere
ACCEPT tcp — anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp — anywhere anywhere state NEW tcp dpt:http
REJECT all — anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all — anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@Xia Xia]#
Do I need
You iptables rules looks good, but then next thing is have public ip, if you want open your server to whole world or lan ip, if you want open your server locally?
FYI, in my case, I had to modify the UserDir settings I found in /etc/httpd/conf/httpd.conf. Following your instructions and creating a userdir.conf file was overriden by the defaults in httpd.conf.
Thank you for your tutorial, I couldn’ find much out explaining how to do this. Right now I am having this problem after running the command
setsebool -P httpd_enable_homedirs true
I get
“-bash: setsebool: command not found”
I am running Centos 6.0, what could be causing the issue?
Thanks
Hi Nicholas,
Could you post output of following commands:
CentOS 6.0 should not be a problem…
I keep getting a 403 Forbidden saying I don’t have permission to access this…can you help me?
Hi Alice,
What system you are running?
Could you post output of following commands: