Пароль на папку или сайт через .htaccess и .htpasswd
Пароль на папку ставят двумя файлами: в .htpasswd лежат логины и зашифрованные пароли, а в .htaccess — строки, которые велят Apache спрашивать пароль. Браузер покажет окно входа, и без верного пароля посетитель получит ошибку 401.
Содержание 13
Что сделать прямо сейчас
- Перед правкой сохраните копию файла .htaccess к себе на компьютер: если что-то пойдёт не так, её можно будет вернуть.
- Создайте файл с логином и паролем командой htpasswd — как.
- Добавьте в .htaccess закрываемой папки четыре строки — какие. Сохраните файл и сразу откройте сайт. Если появилась ошибка 500, уберите добавленные строки — сайт заработает как раньше.
- Проверьте, что без пароля адрес отвечает 401, а с паролем открывается, — как проверить.
Пароль ставьте на сайт, который открывается по HTTPS: при входе по Basic логин и пароль уходят незашифрованными, и защищает их только HTTPS — как подключить бесплатный сертификат.
Где взять программу htpasswd
Файл с паролями создаёт программа htpasswd. На хостинге её запускают по SSH — так советуют справки Timeweb и Beget. Если доступа по SSH нет, спросите поддержку хостинга, как поставить пароль на папку.
На своём VPS с Ubuntu программа приходит вместе с Apache, в пакете apache2-utils. Если команды нет, установите пакет: sudo apt install apache2-utils.
Создать файл с паролем
Подключитесь по SSH и узнайте полный путь к домашней папке — он понадобится в .htaccess:
cd
pwdКоманда cd без адреса переходит в домашнюю папку, а pwd показывает путь к ней, например /home/u/user (про cd и pwd). Создайте файл с паролем для пользователя anna:
htpasswd -c ~/.htpasswd annaПрограмма дважды попросит пароль. Символы при вводе не видны — так и задумано: наберите пароль и нажмите Enter. Вместо anna впишите свой логин; двоеточие в логине ставить нельзя.
Ключ -c создаёт новый файл. Если файл с таким именем уже есть, -c перезапишет его вместе со всеми логинами, поэтому для второго пользователя ключ не нужен — см. ниже.
Файл с паролями держите вне корневой папки сайта (public_html) — так советуют документация Apache и справка Beget: тогда его не скачать по адресу сайта. Домашняя папка для этого подходит.
Строки для .htaccess
Откройте .htaccess в папке, которую нужно закрыть, — или создайте его (как), — и добавьте строки:
AuthType Basic
AuthName "Private"
AuthUserFile /home/u/user/.htpasswd
Require valid-userAuthType Basic— вход по логину и паролю в окне браузера.AuthName— название закрытой области. Если на сайте две закрытые папки с одним названием, браузер попробует для второй тот же пароль.AuthUserFile— полный путь к файлу с паролями: начало — из команды pwd, в конце /.htpasswd. Неполный путь Apache отсчитывает от своей служебной папки (ServerRoot), а не от папки сайта, поэтому пишите путь целиком.Require valid-user— пускать любого пользователя из файла. Чтобы пускать только одного, напишитеRequire user anna.
Пароль на весь сайт — те же строки в .htaccess корневой папки сайта: на Timeweb это public_html.
Добавить, сменить пароль или удалить пользователя
Добавить пользователя или сменить пароль — та же команда без ключа -c:
htpasswd ~/.htpasswd ivanУдалить пользователя:
htpasswd -D ~/.htpasswd ivanПроверить, подходит ли пароль, — программа спросит его и ответит, верный ли он:
htpasswd -v ~/.htpasswd annaВ справке Timeweb команда записана с ключом -b — пароль вписывают прямо в неё. Документация Apache просит пользоваться этим ключом с большой осторожностью: пароль виден в тексте команды. Без -b программа спросит пароль сама.
Пароль только на один файл
Закрыть паролем один файл, например страницу входа WordPress wp-login.php, можно блоком Files в .htaccess корневой папки:
<Files "wp-login.php">
AuthType Basic
AuthName "Private"
AuthUserFile /home/u/user/.htpasswd
Require valid-user
</Files>Остальной сайт открывается как раньше.
Свой IP без пароля
Чтобы со своего IP входить без пароля, а остальных пускать только с паролем, добавьте строку Require ip:
AuthType Basic
AuthName "Private"
AuthUserFile /home/u/user/.htpasswd
Require ip 203.0.113.10
Require valid-userНесколько строк Require без блока работают через «или»: посетителя с адресом 203.0.113.10 пустят без пароля, остальных — после верного логина и пароля. Вместо 203.0.113.10 впишите свой IP. Если сайт открывается у вас по IPv6, в строку Require ip нужен и ваш адрес IPv6.
Как проверить
В терминале компьютера (как открыть терминал, про curl) запросите закрытый адрес без пароля:
curl -I https://example.com/private/В первой строке ответа должно стоять число 401 — сервер требует пароль. Если вы пустили свой IP без пароля, с вашего компьютера придёт тот же ответ, что и до установки пароля, — так и должно быть. Теперь запросите тот же адрес с логином:
curl -I -u anna https://example.com/private/curl спросит пароль. С верным паролем придёт тот же ответ, что и до установки пароля, например код 200, — вход работает. Проверять удобнее через curl: браузер, в котором вы уже вводили пароль, может не спросить его снова.
Как убрать пароль
Удалите из .htaccess добавленные строки: AuthType, AuthName, AuthUserFile и Require valid-user или Require user — или весь блок Files. Файл с паролями, если он больше не нужен, удалите по SSH: rm ~/.htpasswd.
Пароль на своём VPS
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Файл с паролями положите в папку настроек Apache — вне папки сайта. Ключ -B сохраняет пароль способом bcrypt — документация Apache называет его очень надёжным:
sudo htpasswd -c -B /etc/apache2/.htpasswd annaСначала sudo может спросить пароль вашего пользователя на сервере, затем htpasswd дважды попросит новый пароль для anna.
В .htaccess тогда пишите AuthUserFile /etc/apache2/.htpasswd. Чтобы Apache читал строки входа из .htaccess, в настройках сайта нужно AllowOverride AuthConfig или AllowOverride All — как разрешить .htaccess.
При AllowOverride None — так задано для /var/www/ в Ubuntu — Apache не читает .htaccess, и пароль спрашиваться не будет. Если разрешены другие группы, но не AuthConfig, строки входа дадут ошибку 500. Запись об ошибке видна в журнале Apache:
sudo tail -n 50 /var/log/apache2/error.logОшибки и как их исправить
| Что видите | Что делать |
|---|---|
| окно входа не появляется | .htaccess не в той папке или назван не ровно .htaccess; на своём VPS Apache может не читать .htaccess — как разрешить .htaccess. Браузер мог запомнить пароль — проверьте через curl |
| ошибка 500 сразу после сохранения | опечатка в строках или на VPS не разрешена группа AuthConfig — разбор |
| ошибка 500 после ввода пароля | Apache не смог открыть файл с паролями — в журнале ошибок запись AH01620. Впишите в AuthUserFile полный путь из команды pwd |
| окно входа появляется снова после ввода пароля | неверный логин или пароль: в журнале ошибок AH01618 — нет такого логина, AH01617 — не тот пароль. Проверьте пароль командой htpasswd -v; в пароле большие и маленькие буквы различаются |
| перестали входить другие пользователи | файл создан заново с ключом -c — добавьте их снова командой без -c |
| после нажатия «Отмена» — страница с ошибкой 401 | так и должно быть — про ошибку 401 |
| файл .htpasswd открывается по адресу сайта | перенесите его в домашнюю папку и поправьте путь в AuthUserFile |
Источники
- Документация Apache: аутентификация и авторизация — файл с паролями держат вне папки сайта и создают командой htpasswd -c; строки AuthType, AuthName, AuthUserFile и Require; в .htaccess нужна группа AuthConfig; Basic передаёт пароль незашифрованным; для областей с одним AuthName браузер пробует тот же пароль.
- Документация Apache: AuthUserFile — неполный путь отсчитывается от ServerRoot; в файле строки логин:хэш.
- Документация Apache: htpasswd — ключ -c создаёт файл и перезаписывает существующий; без -c пользователь добавляется или получает новый пароль; -D удаляет, -v проверяет пароль, -B — bcrypt; с ключом -b пароль виден в команде; в логине не может быть двоеточия.
- Документация Apache: логика Require — несколько строк Require без блока работают как RequireAny: достаточно, чтобы подошла одна.
- Документация Apache: FilesMatch — блоки Files и FilesMatch можно писать в .htaccess; в FilesMatch имя файла задают регулярным выражением.
- Документация Apache: AllowOverride — по умолчанию None; группы AuthConfig, FileInfo, Indexes, Limit и Options; директива не из разрешённой группы даёт ошибку сервера.
- Документация Apache: файлы .htaccess — файл действует на свою папку и вложенные, читается при каждом запросе, при AllowOverride None не читается; проверка бессмысленным словом.
- Исходный код Apache 2.4.58: mod_auth_basic.c — неизвестный логин — запись AH01618, неверный пароль — AH01617, ответ 401; ошибка чтения файла с паролями — ответ 500.
- Исходный код Apache 2.4.58: mod_authn_file.c — запись AH01620, если файл с паролями не открылся.
- Исходный код APR 1.7.2: apr_getpass.c — символы пароля при вводе не показываются.
- Пакет apache2 в Ubuntu 24.04 — зависит от пакета apache2-utils.
- Пакет apache2-utils в Ubuntu 24.04 — в нём программа htpasswd.
- Документация curl: ключ -u — если указан только логин, curl спросит пароль.
- Timeweb: создание и настройка .htaccess — htpasswd по SSH, файл с паролями в домашней папке, пароль на весь сайт — в public_html.
- Beget: файл .htaccess — файл с паролями — вне папки сайта; htpasswd -c создаёт файл, без -c добавляет пользователя; вход Basic — только по HTTPS.
Сверено 15 октября 2026 года.
Что почитать дальше
- Ошибка 401 Unauthorizedчто значит ответ 401 и откуда он берётся.
- Запрет доступа в .htaccessзакрыть папку совсем или пустить только свой IP.
- Файл .htaccessчто это, как создать и не сломать сайт.
- Бесплатный SSL-сертификатчтобы пароль не уходил открытым текстом.