Справочник

Пароль на папку или сайт через .htaccess и .htpasswd

Пароль на папку ставят двумя файлами: в .htpasswd лежат логины и зашифрованные пароли, а в .htaccess — строки, которые велят Apache спрашивать пароль. Браузер покажет окно входа, и без верного пароля посетитель получит ошибку 401.

≈ 9 мин чтения
Содержание 13

Что сделать прямо сейчас

  1. Перед правкой сохраните копию файла .htaccess к себе на компьютер: если что-то пойдёт не так, её можно будет вернуть.
  2. Создайте файл с логином и паролем командой htpasswd — как.
  3. Добавьте в .htaccess закрываемой папки четыре строки — какие. Сохраните файл и сразу откройте сайт. Если появилась ошибка 500, уберите добавленные строки — сайт заработает как раньше.
  4. Проверьте, что без пароля адрес отвечает 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-user
  • AuthType 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

Источники

Сверено 15 октября 2026 года.

Что почитать дальше