Introduction
When setting up a web server, there are often sections of the site that you wish to restrict access to. Web applications often provide their own authentication and authorization methods, but the web server itself can be used to restrict access if these are inadequate or unavailable.
In this guide, we’ll demonstrate how to password protect assets on an Apache web server running on Ubuntu 14.04.
1: установка пакета apache2-utils
Для начала нам нужно установить на сервер пакеты, которые понадобятся нам в работе.
Чтобы создать файл для хранения паролей, понадобится утилита htpasswd. Она входит в пакет apache2-utils, который можно найти в стандартном репозитории.
Обновите индекс пакетов и установите apache2-utils с помощью следующих команд:
sudo apt updatesudo apt install apache2-utils
2: создание файла паролей
Теперь у вас есть доступ к команде htpasswd, которая позволяет создавать файлы паролей. С помощью такого файла Apache будет выполнять аутентификацию пользователей. Создайте скрытый файл .htpasswd в каталоге /etc/apache2.
При первом запуске утилита требует флаг -c, который создаёт необходимый файл .htpasswd. Чтобы создать новую запись в файле, укажите в конце команды имя пользователя:
sudo htpasswd -c /etc/apache2/.htpasswd 8host
Команда запросит пароль текущего пользователя.
Чтобы добавить в этот файл данные других пользователей, используйте команду htpasswd без флага –с.
3: настройка аутентификации apache
Файл паролей с необходимыми данными готов. Теперь нужно настроить Apache, чтобы он проверял этот файл перед обслуживанием закрытого контента. Это можно сделать двумя способами: добавить информацию о файле паролей в виртуальный хост или создать файлы .htaccess в тех каталогах, содержимое которых нужно защитить.
Выберите наиболее подходящий метод настройки и следуйте инструкциям соответствующего раздела.
4: тестирование авторизации
Чтобы убедиться, что все необходимые каталоги теперь защищены паролем, попробуйте получить доступ к закрытому контенту в веб-браузере. На экране должна появиться форма аутентификации, предлагающая ввести имя пользователя и пароль:
Allow ip address
Order deny,allow Deny from all Allow from 10.1.2.3
Allow ipv6 addresses and subnets
Order deny,allow Deny from all Allow from 2001:db8::a00:20ff:fea7:ccea Allow from 2001:db8::a00:20ff:fea7:ccea/10
Allow more than 1 ip address
Order deny,allow Deny from all Allow from 192.168.1.104 192.168.1.205
Allow network/netmask pair
Order deny,allow Deny from all Allow from 10.1.0.0/255.255.0.0
Allow network/nnn cidr specification
Order deny,allow Deny from all Allow from 10.1.0.0/16
Allow partial ip addresses, first 1 to 3 bytes of ip, for subnet restriction
Order deny,allow Deny from all Allow from 10.1 Allow from 10 172.20 192.168.2
Configuring access control with .htaccess files
If you wish to set up password protection using .htaccess files instead, you should begin by editing the main Apache configuration file to allow .htaccess files:
- sudonano /etc/apache2/apache2.conf
Deny subdomains
Order Allow,Deny Allow from apache.org Deny from wireshark.apache.org
Install the apache utilities package
In order to create the file that will store the passwords needed to access our restricted content, we will use a utility called htpasswd. This is found in the apache2-utils package within the Ubuntu repositories.
Update the local package cache and install the package by typing this command. We will take this opportunity to also grab the Apache2 server in case it is not yet installed on the server:
- sudoapt-get update
- sudoapt-getinstall apache2 apache2-utils
Skeleton .htaccess file
I use this when I start a new site, and uncomment or delete parts of the file depending on the sites needs
Ultimate htaccess file sample
Вариант 1: настройка аутентификации через виртуальный хост
Этот метод обеспечивает более высокую производительность, поскольку веб-серверу не придется читать дополнительные конфигурационные файлы. Для такой настройки вам нужен доступ к конфигурации, который есть не у всех пользователей.
Откройте файл виртуального хоста того сайта, доступ к которому нужно ограничить. В данном мануале используется стандартный файл default-ssl.conf , который поставляется вместе с apache.
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
Внутри файл выглядит так (для удобства закомментированные строки опущены):
Вариант 2: настройка аутентификации с помощью файлов .htaccess
Apache может управлять аутентификацией с помощью файлов .htaccess. При этом Apache перечитывает каждый такой файл, что, конечно, отражается на производительности. По этой причине мы рекомендуем настраивать веб-сервер согласно первому варианту. Вариант 2 подходит, если вы уже используете файлы .htaccess или хотите предоставить пользователям без прав root возможность управлять ограничениями.
Чтобы включить поддержку аутентификации по файлам .htaccess, откройте конфигурационный файл Apache:
sudo nano /etc/apache2/apache2.conf
Найдите блок <Directory> для каталога /var/www (document root по умолчанию). Чтобы включить поддержку файлов .htaccess, нужно изменить значение директивы AllowOverride с None на All.
. . .<Directory /var/www/>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>. . .
Сохраните и закройте файл.
Затем нужно добавить файл .htaccess в тот каталог, доступ к которому вы хотите ограничить. Мы для примера покажем ниже, как закрыть доступ к каталогу document root, /var/www/html (то есть ко всему сайту). Чтобы ограничить доступ к другому каталогу, внесите в код соответствующие поправки.
sudo nano /var/www/html/.htaccess
Требования
Войдите в сессию вашего пользователя sudo и приступайте к работе.
Заключение
Теперь контент сайта защищён с помощью пароля. Парольную аутентификацию рекомендуется комбинировать с шифрованием SSL, в противном случае учетные данные будут передаваться на сервер в виде простого текста, а это очень серьёзная проблема для безопасности.
Conclusion
You should now have everything you need to set up basic authentication for your site. Keep in mind that password protection should be combined with SSL encryption so that your credentials are not sent to the server in plain text. To learn how to create a self-signed SSL certificate to use with Apache, follow this guide. To learn how to install a commercial certificate, follow this guide.
Configuring access control within the virtual host definition
Begin by opening up the virtual host file that you wish to add a restriction to. For our example, we’ll be using the 000-default.conf file that holds the default virtual host installed through Ubuntu’s apache package:
- sudonano /etc/apache2/sites-enabled/000-default.conf
Inside, with the comments stripped, the file should look similar to this: