Debian htpasswd команда не найдена

Обновлено: 06.07.2024

Почти на каждом сайте есть разделы, к которым нужно ограничить доступ. Веб-приложения, как правило, предоставляют собственный метод авторизации, но если такой вариант по какой-либо причине не подходит, для ограничения доступа можно использовать сам веб-сервер.

В этом руководстве показано, как настроить авторизацию на основе пароля на веб-сервере Apache в Ubuntu 14.04.

Требования

Для выполнения руководства нужен аккаунт не-root пользователя с правами sudo. Чтобы создать такой аккаунт, обратитесь к этому руководству.

Установка утилит Apache

Чтобы создать файл для хранения паролей, понадобится утилита htpasswd. Она входит в пакет apache2-utils, который можно найти в репозитории Ubuntu.

Обновите список пакетов и установите необходимые утилиты и сервер Apache2 при помощи следующей команды:

sudo apt-get update
sudo apt-get install apache2 apache2-utils

Создание файла паролей

Теперь на сервере доступна команда htpasswd, которая позволяет создать файл паролей, необходимый серверу Apache для авторизации пользователей. Создайте скрытый файл .htpasswd в каталоге /etc/apache2.

При первом запуске данной утилиты нужно использовать флаг –c, который и создаст необходимый файл. Укажите имя пользователя в конце команды, чтобы создать новую запись в файле:

sudo htpasswd -c /etc/apache2/.htpasswd 8host

Примечание: Замените условное имя пользователяapache настройка авторизации 8host своим именем.

Программа предложит создать и подтвердить пароль для этого пользователя.

Чтобы добавить других пользователей в файл паролей, используйте команду htpasswd без флага –с:

sudo htpasswd /etc/apache2/.htpasswd another_user

Файл паролей содержит имена пользователей и их пароли в зашифрованном виде:

cat /etc/apache2/.htpasswd
8host:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Настройка авторизации Apache

Итак, необходимый файл паролей готов. Теперь нужно настроить Apache для проверки этого файла перед обслуживанием закрытого контента. Это можно сделать двумя способами.

Первый способ: отредактировать настойки Apache и добавить сведения о файле паролей в виртуальный хост. Такой способ, как правило, более производительный, поскольку позволяет избежать чтения общих конфигурационных файлов. Если вы используете виртуальные хосты, рекомендуется прибегнуть к этому способу настройки.

Второй способ больше подходит пользователям, которые не имеют возможности редактировать виртуальный хост. В таком случае ограничить доступ к некоторым разделам сайта можно при помощи файла .htaccess. Сервер Apache использует файлы .htaccess для того, чтобы настроить определенные элементы конфигурации в каталоге, хранящем контент. Недостатком такого способа является то, что сервер Apache должен перечитывать все эти файлы при каждом запросе к этому каталогу, что может негативно повлиять на производительность.

Выберите наиболее подходящий способ настройки и следуйте инструкциям соответствующего раздела.

Настройка авторизации через виртуальный хост

Откройте файл виртуального хоста сайта, доступ к которому нужно ограничить. В данном примере используется стандартный файл 000-default.conf, содержащий виртуальный хост по умолчанию.

sudo nano /etc/apache2/sites-enabled/000-default.conf

Раскомментированный файл выглядит так:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog $/error.log
CustomLog $/access.log combined
</VirtualHost>

Авторизация в Apache настраивается по каталогам. Для этого найдите раздел каталога, к которому нужно ограничить доступ, в блоке <Directory ___>. В данном примере нужно ограничить доступ к document root (при необходимости укажите другой каталог):

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog $/error.log
CustomLog $/access.log combined
<Directory "/var/www/html">
</Directory>
</VirtualHost>

В блоке этого каталога нужно указать тип авторизации, в данном случае – Basic. В параметре AuthName укажите имя области данных, которое будет отображаться при запросе. Используйте директиву AuthUserFile, чтобы указать созданный ранее файл паролей. Установите значение valid-user для директивы Require, чтобы разрешить доступ к контенту только тем пользователям, которые могут пройти авторизацию.

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog $/error.log
CustomLog $/access.log combined
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>

Сохраните и закройте файл. Перезапустите Apache, чтобы обновить конфигурации.

sudo service apache2 restart

Теперь доступ к контенту, находящемуся в этом каталоге, защищён паролем.

Настройка авторизации при помощи файла .htaccess

Для начала нужно настроить Apache для поддержки файлов .htaccess. Откройте конфигурации Apache:

sudo nano /etc/apache2/apache2.conf

Найдите блок <Directory> каталога /var/www (как вы понимаете, это настройки каталога document root). Включите поддержку файлов .htaccess, заменив значение директивы AllowOverride на All.

. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .

Сохраните и закройте файл.

Затем нужно добавить файл .htaccess в каталог, доступ к которому нужно ограничить. Опять же, в примере доступ будет ограничен к каталогу document root, /var/www/html (то есть ко всему сайту). Чтобы ограничить доступ к другому каталогу, внесите в код соответствующие поправки.

sudo nano /var/www/html/.htaccess

В этом файле нужно указать тип авторизации, в данном случае это Basic. В директиве AuthName задайте имя области данных, которое будет отображаться при запросе. В директиве AuthUserFile укажите созданный ранее файл паролей для Apache. Для директивы Require укажите значение valid-user, чтобы открыть доступ к контенту только тем пользователям, которые могут пройти авторизацию.

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Сохраните и закройте файл. Перезапустите веб-сервер, чтобы обновить его настройки.

sudo service apache2 restart

Тестирование авторизации

Чтобы убедиться, что требуемые каталоги защищены паролем, попробуйте получить доступ к закрытому контенту в веб-браузере. На экране должна появиться форма авторизации, предлагающая указать имя пользователя и пароль:

Authentication Required
The server requires a username and password. The server says:
Restricted server.
User Name:
Password:

Введите валидные учётные данные, чтобы получить доступ к контенту. В случае получения неверных учётных данных сервер вернёт ошибку «Unauthorized».

Заключение

Теперь контент сайта защищён с помощью пароля. Имейте в виду, что защиту паролем следует комбинировать с шифрованием SSL, в противном случае учетные данные будут передаваться на сервер в виде простого текста, а это очень серьёзная уязвимость для безопасности.

Примечание: Чтобы узнать, как создать SSL-сертификат для Apache, читайте данное руководство.

Бывают случаи, когда нужно ограничить доступ пользователей к определенной папке на сайте (разделу сайта) и пускать туда посетителей только по паролю. Например, в раздел администратора.

В этой статье мы узнаем, как использовать базовую функцию аутентификации, встроенную в Nginx. Кроме того, вы можете комбинировать это с другими ограничениями, такими как разрешение доступа с определенных IP-адресов.

Ограничить доступ можно по IP-адресу или организовать одновременное ограничение доступа по адресу и паролю.

2. Как настроить доступ по паролю.

Во-первых, необходим файл с кодами авторизации, который содержит имена пользователей и их пароли.

Во-вторых, необходимо указать web-серверу, что доступ к этому разделу сайта (папка, директория) возможен только авторизованным пользователям.


Очевидно, у вас должна быть копия Nginx в вашей системе, прежде чем вы сможете ее настроить. Кроме того, вы должны установить утилиту Apache для генерации хешированных паролей. На Nginx файлы паролей используют тот же формат, что и на Apache.

На CentOS 7 вы можете установить его так:

4. Файл htpasswd.

4.1. Описание файла htpasswd.

Расположение файла тоже может быть любое!

Файл htpasswd содержит список имен пользователей и паролей. Nginx использует его для проверки учетных данных пользователей, которые хотят получить доступ к защищенным областям сайта.

Задаёт файл, в котором хранятся имена и пароли пользователей.

Формат файла следующий:

В имени файла можно использовать переменные.

Сначала создайте пустой файл с именем /etc/nginx/htpasswd примерно так:

4.2. Создание файла htpasswd с помощью утилиты htpasswd.

Или просто заказать первичное создание этого файла у утилиты:

Внимание! Если у вас уже существует файл с таким именем, то его содержимое будет заменено, поэтому перед процедурой обязательно удостоверьтесь, что такого файла нет или используйте любое другое имя, которого точно нет.

Теперь вы можете добавить имена пользователей и пароли в этот файл с помощью команды htpasswd , добавлять -c не надо уже, так как файл для хранения паролей уже создан и создавать его снова нам не надо.

Например, если вы хотите добавить пользователя bob в файл, запустите:

Вам будет предложено ввести пароль дважды. Когда вы введете пароль, его видно не будет.


Позже, если вы хотите изменить существующий пароль, просто повторите команду. Точно так же вы можете добавить других пользователей в файл, выполнив приведенную выше команду с другим именем пользователя.

Файл htpasswd представляет собой простой текстовый файл, и вы можете проверить его с помощью текстового редактора. Имена пользователей хранятся как есть, но пароли хешируются и шифруются.

Просмотрите содержимое файла, чтобы убедиться, что учётные данные внесены правильно:

Вот файл, в котором есть два пользователя alice и bob :

Это пароли пользователей, никому не рассказывайте!

Если вы хотите удалить пользователя из файла, используйте ключ -D следующим образом:

4.3. Создание файла htpasswd с помощью утилиты openssl.

Если вы любите Nginx и давно не используете Apache, то устанавливать apache2-utils только ради утилиты htpasswd кажется глупым. И это верно. У вас на сервере, скорее всего уже есть openssl .

Пароль команда запросит ввести дважды.

Полученную строку копируем в файл htpasswd .

4.4. Создание файла htpasswd с помощью стороннего сервиса.

Вводим туда необходимые данные:

И жмем кнопку «Create .htpasswd file».

В результате получаем аналогичную с предыдущим пунктом строку, содержащую в себе логин и хеш пароля.

Далее необходимо создать файл /etc/nginx/htpasswd и вставить в него эту строку, которую нам сформировал сайт.

5. Ограничение на каталог.

Теперь откройте файл конфигурации для конкретного сайта с помощью редактора, такого как mcedit.

Рассмотрим на примере центральной конфигурации Nginx /etc/nginx/nginx.conf :

Пролистайте файл и найдите блок server . Сделав это, добавьте блок location для пути, который вы хотите защитить. Внутри этого блока вы должны установить имя области и путь к файлу htpasswd .

В приведенном ниже примере мы ограничили доступ ко всему в каталоге /files , и «имя области» установлено как «Restricted«. Имя области отображается браузерами и используется для определения защищенных частей веб-сайта.

Если вы хотите защитить другой путь, просто добавьте еще один блок с тем же содержимым:

Имейте в виду, что вы можете также использовать другие директивы внутри этих блоков местоположения.

Сохраните файл и выйдите из редактора.

Чтобы эти изменения вступили в силу, вы должны перезагрузить конфигурацию Nginx:

6. Ограничение для всего сайта.

А если вы хотите установить ограничение для всего сайта?

Вы можете сделать это, переместив основные директивы аутентификации в блок server :

Вы также можете пропустить определенные пути, установив для auth_basic значение off в блоке location .

Например, следующий блок позволяет пользователям получить доступ.

Директивы:

7. Объединение ограничений IP с базовой аутентификацией.

Скажем, у вас есть раздел на вашем сайте, предназначенный для использования сотрудниками компании. Любой сотрудник, обращающийся к веб-серверу из сети, может получить доступ к странице без использования пароля. Однако, если они пытаются получить к нему доступ через Интернет, им следует использовать пароль.

Это означает, что у нас должно быть два ограничения: ограничение IP и директива базовой аутентификации. Мы уже видели, как указать основные директивы аутентификации. IP-адреса могут быть разрешены или заблокированы с помощью директив allow и deny . Кроме того, вы можете указать Nginx выполнить одно из этих условий, используя satisfy any .

Таким образом, блок location может выглядеть примерно так:

В приведенном выше примере любой пользователь с IP-адресом 10.2.0.0-10.2.255.255 и 10.3.155.26 допускается без пароля. Для других пользователей мы возвращаемся к базовой аутентификации.

Правила проверяются в порядке их записи до первого соответствия. В данном примере доступ разрешён только для IPv4-сетей 10.1.1.0/16 и 192.168.1.0/24 , кроме адреса 192.168.1.1 , и для IPv6-сети 2001:0db8::/32 .

Директивы:

Разрешает доступ для указанной сети или адреса. Если указано специальное значение unix: , разрешает доступ для всех UNIX-сокетов.

Запрещает доступ для указанной сети или адреса. Если указано специальное значение unix: , запрещает доступ для всех UNIX-сокетов.

8. Доступ внутри сети, но без доступа вне сети.

Теперь рассмотрим другую ситуацию. Возможно, вы хотите, чтобы сотрудники имели доступ к этим файлам только из сети компании, используя пароль. Сотрудники не должны получать доступ к этим файлам вне сети компании. Это означает, что оба условия должны быть выполнены.

Чтобы внести это изменение, измените any на all :

Пример ниже разрешает доступ, если все ( all ) или хотя бы один ( any ) из модулей разрешают доступ.

Директивы:

9. Проверка работы htpasswd.

Внимание! Если у вас открылся сайт без окошка авторизации, то просто страница сохранилась в кеше браузера. Перезагрузите страницу с Shift+F5 и увидите приглашение залогиниться. Работает!

Если вы все сделали правильно, то при посещении запароленной папки (раздела на сайте), вы должны увидеть примерно следующее уведомление:


Как веб-администратор, вы можете счесть полезным ограничить доступ посетителей к некоторым частям веб-сайта, будь то временно или на постоянной основе. Хотя веб-приложения могут предоставлять свои собственные методы проверки подлинности и авторизации, вы также можете полагаться на сам веб-сервер, чтобы ограничить доступ по тем или иным причинам.

В этом руководстве вы узнаете, как защитить паролем ресурсы на веб-сервере Apache, работающем в Debian или Ubuntu, чтобы обеспечить вашему серверу дополнительную безопасность. Данная инструкция также применима к производным этих дистрибутивов, в том числе к Linux Mint и Kali Linux.

Если вы хотите настроить базовую аутентификацию на Apache в Windows, то смотрите статью «Как защитить папку Apache паролем в Windows».

Предполагается, что вы уже установили веб-сервер Apache, если нет, то смотрите инструкции:

Также нам потребуются инструменты из пакета apache2-utils:


Для начала нужно включить поддержку файлов .htaccess, чтобы веб-сервер использовал настройки из этих файлов — по умолчанию это отключено.

Откройте файл /etc/apache2/apache2.conf

Найдите группу строк:

и замените её на:

Сохраните и закройте файл.

Создайте папку, где будут защищённые паролем файлы:

С помощью утилиты htpasswd мы создадим файл с именем пользователя и хешем пароля. Если указана опция -c, то старый файл будет удалён, а новый создан. Утилита htpasswd присутствует и в Apache для Windows, но нужно указать полный путь до неё.

Общий вид команды:

Опция -B означает использовать для шифрования пароля bcrypt. В настоящее время это считается очень безопасным. Для наших тестов это безразлично, но для реальной защиты папки или сайта паролем рекомендуется выполнять показанные выше команды с опцией -B. В дополнении к этой опции вы можете использовать флаг -C со значением от 4 до 17. Он устанавливает время вычисления, используемое для алгоритма bcrypt (чем выше, тем безопаснее, но медленнее). Значением по умолчанию является 5.

Если файл .htpasswd уже существует, то для добавления ещё одного пользователя, без удаления старых, используйте эту же команду, но без опции -c:

Для смены пароля, вновь используйте эту же команду без опции -c, указав имя пользователя, чей пароль вы хотите поменять.

Конечно же файл .htpasswd рекомендуется хранить в директориях, не доступных для постороннего доступа (например, /etc/apache2/.htpasswd). Особенно не нужно его хранить в папках веб-сервера вместе с файлами сайтов. Но иногда веб-мастер в силу простоты или невозможности сохранить файл где-либо ещё (на виртуальных хостингах, например) хранит этот файл прямо вместе с файлами сайтов.

Посмотрим содержимое файла .htpasswd:

Теперь создадим файл .htaccess:

И скопируем в него:


Опция -B означает использовать для шифрования пароля bcrypt. В настоящее время это считается очень безопасным. Для наших тестов это безразлично, но для реальной защиты папки или сайта паролем рекомендуется выполнять показанные выше команды с опцией -B. В дополнении к этой опции вы можете использовать флаг -C со значением от 4 до 17. Он устанавливает время вычисления, используемое для алгоритма bcrypt (чем выше, тем безопаснее, но медленнее). Значением по умолчанию является 5.

По умолчанию модуль Digest аутентификации отключён, включим его:

Если вы ещё этого не сделали, включите поддержку файлов .htaccess, чтобы веб-сервер использовал настройки из этих файлов — по умолчанию это отключено.

Откройте файл /etc/apache2/apache2.conf:

Найдите группу строк:

и замените её на:

Сохраните и закройте файл.

Создайте папку, где будут защищённые паролем файлы:

Для генерации паролей нужно использовать команду htdigest. Если указать опцию -c, то будет создан новый файл, а старый удалён.

Общий формат команды:

REALM — это область применения. Она соответствует директиве AuthName в файле .htaccess. То есть можно для одного пользователя установить разные пароли, изменяя значения REALM. В разных директивах можно менять значение AuthName в файле .htaccess и в зависимости от этого значения будет подходить тот или иной пароль.

Посмотрим содержимое файла .htpasswd:

Пример содержимого файла:

Теперь создадим .htaccess:

И скопируем в него следующее:

/test user1
New password:
Re-type new password:
Adding password for user user1
То есть пакольчик ручками вбивать надо.

>И думаем. Что вопрошаемый, что оратор

Я Вас что-то не понял.
Был поставлен вопрос:

> В системе FreeBSD 4.7, Squid 2.5 не могу создать файл паролей по ./htpasswd.

Я на него ответил.
Указынный мною метод работает.
Какие ко мне претензии ?

>>И думаем. Что вопрошаемый, что оратор
>
>Я Вас что-то не понял.
>Был поставлен вопрос:
>
>> В системе FreeBSD 4.7, Squid 2.5 не могу создать файл паролей по ./htpasswd.
>
>Я на него ответил.
>Указынный мною метод работает.
>Какие ко мне претензии ?
:))) Никаких, наоборот спасибо. Вы вопрошаемый, я оратор, это от меня толку мало.
Natasha
Это было не тебе:

>>>И думаем. Что вопрошаемый, что оратор
>>
>>Я Вас что-то не понял.
>>Был поставлен вопрос:
>>
>>> В системе FreeBSD 4.7, Squid 2.5 не могу создать файл паролей по ./htpasswd.
>>
>>Я на него ответил.
>>Указынный мною метод работает.
>>Какие ко мне претензии ?


>Natasha
>Это было не тебе:
>
>>>>И думаем. Что вопрошаемый, что оратор

Ага, понятно :).

Не знаю, можно ли так сказать, но я сейчас "пытаюсь сбегать в Интернет из-под Unix'a" и что-то никак. Через Window'sную сеть.


>>Natasha
>>Это было не тебе:
>>
>>>>>И думаем. Что вопрошаемый, что оратор
>
>Ага, понятно :).
>
>Не знаю, можно ли так сказать, но я сейчас "пытаюсь сбегать в
>Интернет из-под Unix'a" и что-то никак. Через Window'sную сеть.

ох уж эти женщины. у них свой особый подход и терминология.

Памяти мамы:

М: Андрюш, надо быстро сбегать к "Фамилия"
Я: Хорошо, а это куда?
М: Ну пойдешь туда, знаешь где "фамилия" живут?
Я: Нет не знаю.
М: Ну как тебе объяснить, выйдешь из дома, пойдешь в сторону "объект",
там пройдешь немножко в сторону "объект", а там уж рядом будет.

Я: ну и как мне это найти, знаешь мам, давай по человечески, дошел
до "объект", повернул налево, дошел до развилки и повернул направо,
затем XXX метров прямо, слева будет "объект"

М: ну что ты ко мне придираешься, я ж понятно объясняю (дальше дословно
одни междометия) - ну идешь это в сторону . там это, ну недалеко, потом
туда, а дальше сюда, с той стороны это, ты туда не ходи, а с другой стороны то, но тебе это тоже не надо и тд и тп.

Как хочешь, так и понимай: то, это, туда-сюда . :)))

>>>Natasha
>>>Это было не тебе:
>>>
>>>>>>И думаем. Что вопрошаемый, что оратор
>>
>>Ага, понятно :).
>>
>>Не знаю, можно ли так сказать, но я сейчас "пытаюсь сбегать в
>>Интернет из-под Unix'a" и что-то никак. Через Window'sную сеть.
>
>ох уж эти женщины. у них свой особый подход и терминология.
>
>Памяти мамы:
>
>М: Андрюш, надо быстро сбегать к "Фамилия"
>Я: Хорошо, а это куда?
>М: Ну пойдешь туда, знаешь где "фамилия" живут?
>Я: Нет не знаю.
>М: Ну как тебе объяснить, выйдешь из дома, пойдешь в сторону "объект",
>
>там пройдешь немножко в сторону "объект", а там уж рядом будет.
>
>Я: ну и как мне это найти, знаешь мам, давай по человечески,
>дошел
>до "объект", повернул налево, дошел до развилки и повернул направо,
>затем XXX метров прямо, слева будет "объект"
>
>М: ну что ты ко мне придираешься, я ж понятно объясняю (дальше
>дословно
>одни междометия) - ну идешь это в сторону . там это, ну
>недалеко, потом
>туда, а дальше сюда, с той стороны это, ты туда не ходи,
>а с другой стороны то, но тебе это тоже не надо
>и тд и тп.
>
>Как хочешь, так и понимай: то, это, туда-сюда . :)))

:))))))))))))))))))))))))))))))))))))))))))))))))))))))
Да уж. свободно выражаться технически грамотным языком как некоторые. до этого тоже еще надо дорасти ;)
Спасибо за поддержку.

/test user1
>New password:
>Re-type new password:
>Adding password for user user1
>То есть пакольчик ручками вбивать надо.

Хорошо, попробую :), спасибо

Читайте также: