Activating Mod_Userdir.c in Apache2 – Ubuntu
Posted by | Posted in Command-Line, Guides, Linux, Ubuntu | Posted on 16-09-2009
This morning, I was working on allowing users of my web server to create web pages with in their home directory. Normally this is indicated by a URL of http://server.com/~useraccount and is activated by default. But during the Apache install process the module for modifying the user directory wasn’t activated.
List of things you’ll need to do.
1) Add the module to your virtual host.
2) Enable the module in apache2
3) Restart apache2
4) Create a web directory folder in your home folder
5) make sure your permissions are correct
Step 1, adding the module to your virtual host.
Normally in Ubuntu, your enabled virtual hosts (or virtual hosts that are current running) are located in /etc/apache2/sites-enabled/your_domain_naming_scheme. For this example, I’ll always name my virtual hosts after their qualified domain name (qdn).
sudo nano /etc/apache2/sites-enabled/server.com
With in your < virtualhost > < / virtualhost > tags, you need to add and If Module statement. An If Module states, that if the module exists in the apache lib directory, to go ahead and load it into ram. The common use of the UserDir statement is command and then directory. So in this case UserDir public_html. public_html is the directory that will need to be created in each user’s home directory in order for apache to map the URL to file systems correctly. In this case the URL of http://server.com/~dmccoy will be mapped to the file directory path of /home/dmccoy/public_html/.
< IfModule mod_userdir.c >
UserDir html
< /IfModule >a complete virtual host might look something like this.
NameVirtualHost *:80
< VirtualHost server.com:80 >
ServerAdmin dmccoy@server.com
DocumentRoot /var/www/server.com
ServerName server.com
ServerAlias server
< Directory />
Options FollowSymLinks
AllowOverride None
< /Directory>
< Directory /var/www/server.com/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
< /Directory >
< IfModule mod_userdir.c >
UserDir html
< /IfModule >
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 /var/log/apache2/server.com-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/server.com-access.log combined
ServerSignature On
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 >Step 2, Once you’ve told the virtual host to load the UserDir module, you’ll need to make sure it is enabled in apache2. You can find this out by looking in the /etc/apache2/mods-enabled/ directory.
Both of these files will need to be in the mods-enabled directory.
userdir.conf userdir.load
If they are not, make sure they are in the mods-available directory located at /etc/apache2/mods-available/. If they are in the mods-available directory, all you need to do is symbolically link them into the mods-enabled directory.
sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/userdir.conf sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/userdir.load
Step 3, You’ll need to restart apache2 in order to activate the userdir module.
sudo /etc/init.d/apache2 restart
Step 4, Now that the userdir module is active you can now add the “public_html” directory to any user that wants a website.
Normal command line steps might look something like this.
For yourself
cd ~ mkdir public_html echo "test" > public_html/index.html
Or for another account
sudo mkdir /home/USER/public_html sudo echo "test" > home/USER/public_html/index.html
Step 5, You should now be able to type in your browser http://server.com/~dmccoy and see “test” if you get a Forbidden error, you’ll need to change the permissions on your home directory folder and your public_html folder.
chmod 701 /home/dmccoy chmod 705 /home/dmccoy/public_html
Repeat steps 4 and 5 for every account that would like web access.
Apache 2 Module mod_userdir
Apache 1.3 Module mod_userdir
Per-user web directories
