- Putting authentication directives in a
section, in your main server configuration httpd.conf file, is the preferred way to implement this kind of authentication. - If you do not have access to Apache httpd.conf file (for example shared hosting) then with the help of file called .htaccess you can create password protect directories. .htaccess file provide a way to make configuration changes on a per-directory basis.
- Password file
- And Directory name which you would like to password protect (/var/www/docs)
Step # 1: Make sure Apache is configured to use .htaccess file
You need to have AllowOverride AuthConfig directive in httpd.conf file in order for these directives to have any effect. Look for DocumentRoot Directory entry. In this example, our DocumentRoot directory is set to /var/www. Therefore, my entry in httpd.conf looks like as follows:Save the file and restart ApacheOptions Indexes Includes FollowSymLinks MultiViews AllowOverride AuthConfig Order allow,deny Allow from all
If you are using Red Hat /Fedora Linux:
# service httpd restartIf you are using Debian Linux:
# /etc/init.d/apache-perl restart
Step # 2: Create a password file with htpasswd
htpasswd command is used to create and update the flat-files (text file) used to store usernames and password for basic authentication of Apache users. General syntax:htpasswd -c password-file username
Where,
- -c : Create the password-file. If password-file already exists, it is rewritten and truncated.
- username : The username to create or update in password-file. If username does not exist in this file, an entry is added. If it does exist, the password is changed.
# mkdir -p /home/secure/Add new user called vivek
# htpasswd -c /home/secure/apasswords vivekMake sure /home/secure/apasswords file is readable by Apache web server. If Apache cannot read your password file, it will not authenticate you. You need to setup a correct permission using chown command. Usually apache use www-data user. Use the following command to find out Apache username. If you are using Debian Linux use pache2.conf, type the following command:
# grep -e '^User' /etc/apache2/apache2.conf
Output:
www-dataNow allow apache user www-data to read our password file:
# chown www-data:www-data /home/secure/apasswords
# chmod 0660 /home/secure/apasswords
If you are using RedHat and Fedora core, type the following commands :
# grep -e '^User' /etc/httpd/conf/httpd.conf
Output:
apacheNow allow apache user apache to read our password file:
# chown apache:apache /home/secure/apasswords
# chmod 0660 /home/secure/apasswords
Now our user vivek is added but you need to configure the Apache web server to request a password and tell the server which users are allowed access. Let us assume you have directory called /var/www/docs and you would like to protect it with a password.
Create a directory /var/www/docs if it does not exist:
# mkdir -p /var/www/docs
Create .htaccess file using text editor:
# cd /var/www/docs
# vi .htaccess
Add following text:
AuthType Basic AuthName "Restricted Access" AuthUserFile /home/secure/apasswords Require user vivekSave file and exit to shell prompt.
Step # 3: Test your configuration
Fire your browser type url http://yourdomain.com/docs/ or http://localhost/docs/ or http://ip-address/docsWhen prompted for username and password please supply username vivek and password. You can add following lines to any file
AuthType Basic AuthName "Restricted Access" AuthUserFile /home/secure/apasswords Require user vivekTo change or setup new user use htpasswd command again.
Troubleshooting
If password is not accepted or if you want to troubleshoot authentication related problems, open and see apache access.log/error.log files:Fedora Core/CentOS/RHEL Linux log file location:
# tail -f /var/log/httpd/access_log
# tail -f /var/log/httpd/error_log
Debian Linux Apache 2 log file location:
# tailf -f /var/log/apache2/access.log
# tailf -f /var/log/apache2/error.log