Вопрос или проблема
У меня есть 2 папки: /protected и /admin
В файле htpasswd у меня несколько пользователей, в том числе “admin”
Как мне настроить доступ так, чтобы все пользователи с правами admin могли получить доступ к папке /protected, но только админ мог получить доступ к папке /admin?
location /protected {
auth_basic "Защищенная область";
auth_basic_user_file .htpasswd;
root /static;
autoindex_exact_size off;
autoindex on;
}
location /admin {
auth_basic "Ограниченная область";
auth_basic_user_file .htpasswd;
set $is_admin 0;
if ($remote_user = "admin") {
set $is_admin 1;
}
if ($is_admin = 0) {
return 403;
}
root /static;
autoindex_exact_size off;
autoindex on;
}
location / {
root /static;
autoindex_exact_size off;
autoindex on;
}
Ответ или решение
Настройка доступа к папкам с помощью NGinX и .htpasswd
Ваша задача заключается в организации доступа к двум папкам (/protected и /admin) с использованием файлов аутентификации (.htpasswd). В данной инструкции мы рассмотрим, как обеспечить доступ ко всей папке /protected
для всех пользователей с правами администратора, и разрешить доступ к /admin
только для пользователя с именем "admin".
Шаги для настройки NGinX
-
Создание файла .htpasswd
Для начала необходимо создать файл
.htpasswd
, в котором будут храниться имена пользователей и их пароли. Вы можете сделать это с помощью утилитыhtpasswd
, которая входит в состав пакетаapache2-utils
. Пример команды:htpasswd -c /path/to/.htpasswd admin # Создает .htpasswd и добавляет пользователя "admin" htpasswd /path/to/.htpasswd user1 # Добавляет еще одного пользователя htpasswd /path/to/.htpasswd user2
Убедитесь, что файл
.htpasswd
находился в защищенном месте, недоступном для общего доступа. -
Настройка конфигурации NGinX
Откройте файл конфигурации вашего сайта NGinX (например, в
/etc/nginx/sites-available/your_site
или/etc/nginx/conf.d/your_site.conf
) и добавьте следующие блоки:server { listen 80; server_name your_domain.com; location /protected { auth_basic "Protected Area"; auth_basic_user_file /path/to/.htpasswd; root /static; autoindex_exact_size off; autoindex on; } location /admin { auth_basic "Restricted Area"; auth_basic_user_file /path/to/.htpasswd; # Условие для проверки пользователя set $is_admin 0; # Проверка, является ли пользователь admin if ($remote_user = "admin") { set $is_admin 1; } # Если пользователь не admin, возвращаем статус 403 if ($is_admin = 0) { return 403; } root /static; autoindex_exact_size off; autoindex on; } location / { root /static; autoindex_exact_size off; autoindex on; } }
-
Решение вопросов аутентификации
Важно понимать, что следующий блок кода проверяет, является ли аутентифицированный пользователь "admin":
set $is_admin 0; if ($remote_user = "admin") { set $is_admin 1; } if ($is_admin = 0) { return 403; }
Здесь установленная переменная
$is_admin
принимает значение1
, если текущий пользователь — это "admin". В противном случае, если переменная осталась равной0
, NGinX возвращает ошибку 403 (Доступ запрещен). -
Проверка и перезапуск NGinX
После внесения всех изменений не забудьте проверить конфигурацию NGinX на наличие ошибок:
sudo nginx -t
Если тест прошел успешно, перезапустите сервер для применения изменений:
sudo systemctl restart nginx
Заключение
Теперь ваши папки /protected
и /admin
защищены должным образом: доступ к первой имеет любой пользователь с правами администратора, а ко второй — только пользователь с именем "admin". Убедитесь, что ваши пользователи уведомлены о правилах доступа и могут правильно аутентифицироваться, используя данные, которые вы им предоставили.
Данная настройка не только улучшает безопасность вашего веб-приложения, но и позволяет удобно управлять доступом к различным ресурсам.