Защита паролем каталога и всех его подпапок с использованием .htaccess - PullRequest
12 голосов
/ 08 марта 2011

Я пытаюсь защитить паролем поддомен и все его подкаталоги и файлы, но мои знания по этому вопросу очень ограничены, как я могу это сделать?

Спасибо заранее!

Ответы [ 6 ]

20 голосов
/ 08 марта 2011

Это простой двухэтапный процесс

В вашем .htaccess положите

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/the/directory/you/are/protecting/.htpasswd
require valid-user

используйте http://www.htaccesstools.com/htpasswd-generator/ или командную строку для генерации пароля и поместите его в .htpasswd

Примечание 1. Если вы используете cPanel, вы должны настроить его в разделе безопасности «Директории защиты паролем»

РЕДАКТИРОВАТЬ: Если это не сработало, вероятно, вам нужно сделать AllowOverride All для каталога .htaccess (или, по крайней мере, к предыдущим) в http.conf с последующим перезапуском apache

<Directory /path/to/the/directory/of/htaccess>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
</Directory>
8 голосов
/ 09 августа 2016

Чтобы защитить паролем каталог, обслуживаемый Apache, вам нужен файл .htaccess в каталоге, который вы хотите защитить, и файл .htpasswd, который может находиться в любом месте вашей системы, к которому пользователь Apache может получить доступ (но поместите его где-нибудь разумно и частный). Скорее всего, вы не хотите помещать .htpasswd в ту же папку, что и .htaccess.

Файл .htaccess может уже существовать. Если нет, создайте его. Затем вставьте:

AuthType Basic
AuthName "Your authorization required message."
AuthUserFile /path/to/.htpasswd
require valid-user

Затем создайте файл .htpasswd, используя любое имя пользователя и пароль. Пароль должен быть зашифрован. Если вы работаете на сервере Linux, вы можете использовать команду htpasswd , которая зашифрует пароль для вас. Вот как эта команда может быть использована для этого:

htpasswd -b /path/to/password/file username password

1 голос
/ 07 мая 2017

Вам необходимо сгенерировать строку пароля (имя пользователя + пароль) для аутентификации, записать ее в файл и поместить в подкаталог, доступ к которому вы хотите ограничить.

Строка выглядит как,

username:hashkey
  • Вы можете использовать HTTP генератор паролей , чтобы сделать это.
  • Скопируйте и вставьте строку, полученную с вышеуказанного сайта, в новый файл (.htpasswd) в любом месте вне webroot вашего сайта (лучше хранить в любом месте в домашнем каталоге пользователя).
  • Добавьте следующие строки в ваш файл .htaccess.
AuthType Basic
AuthName "Require Authentication"
AuthUserFile [PATH_TO_FILE]/.htpasswd
Require valid-user
  • Если пароль не запускается, проверьте разрешение файла .htaccess.

  • Если аутентификация не удалась, проверьте наличие файла .htpasswd в указанном месте. (Убедитесь, что у вашей учетной записи достаточно прав для чтения файла .htpasswd)

  • Для этого не нужно перезагружать сервер.

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

1 голос
/ 08 марта 2011

Возможно, вы захотите использовать модуль mod_auth_digest.Apache предоставил очень хорошее руководство по использованию всего спектра модулей аутентификации и авторизации.

0 голосов
/ 01 мая 2019

Просто расширьте ответ Махеша.

.htaccess
AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/the/directory/you/are/protecting/.htpasswd
require valid-user

Если вы не хотите использовать онлайн-генератор паролей, вы можете использовать openssl

openssl passwd -apr1 your_password

Затем введите сгенерированный пароль в .htpasswd в формате:

username:<generated_password>

Пример:

.htpasswd
username:$apr1$ydbofBYx$6Zwbml/Poyb61IrWt6cxu0
0 голосов
/ 19 июля 2017

Чтобы создать правильный пароль, вы можете создать php-файл и запустить его локально (на вашем компьютере, а не на веб-сервере) со следующим содержимым:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<form method="post" accept-charset="utf-8">
    <input type="text" name="clear"/>
    <input type="submit" name="submit" value="generate" />
</form>

<?php
header("Content-Type: text/html; charset=utf-8");

if (isset($_POST['clear']) && $_POST['clear'] != '') {
    $cl = $_POST['clear'];
    $pw = crypt($cl, base64_encode($cl));
    echo $pw;
}
?>
</body>
</html>

Обычно я помещаю свой файл .htpasswd в каталог с именем / htpasswd / вне каталога веб-контента, например AuthUserFile /home/www/usr122/files/htpasswd/.sportsbar_reports_htpasswd (а не в папку веб-контента /home/www/usr122/html/htpasswd/), и переименовываю файл .htpasswd, для чего он предназначен, например, .sportsbar_reports_htpasswd

Сам файл паролей должен выглядеть как

testusername:dGATwCk0tMgfM

где имя пользователя testusername и пароль testuserpassword

...