NGinX разрешает только одного пользователя из .htpasswd

Вопрос или проблема

У меня есть 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

  1. Создание файла .htpasswd

    Для начала необходимо создать файл .htpasswd, в котором будут храниться имена пользователей и их пароли. Вы можете сделать это с помощью утилиты htpasswd, которая входит в состав пакета apache2-utils. Пример команды:

    htpasswd -c /path/to/.htpasswd admin    # Создает .htpasswd и добавляет пользователя "admin"
    htpasswd /path/to/.htpasswd user1       # Добавляет еще одного пользователя
    htpasswd /path/to/.htpasswd user2

    Убедитесь, что файл .htpasswd находился в защищенном месте, недоступном для общего доступа.

  2. Настройка конфигурации 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;
       }
    }
  3. Решение вопросов аутентификации

    Важно понимать, что следующий блок кода проверяет, является ли аутентифицированный пользователь "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 (Доступ запрещен).

  4. Проверка и перезапуск NGinX

    После внесения всех изменений не забудьте проверить конфигурацию NGinX на наличие ошибок:

    sudo nginx -t

    Если тест прошел успешно, перезапустите сервер для применения изменений:

    sudo systemctl restart nginx

Заключение

Теперь ваши папки /protected и /admin защищены должным образом: доступ к первой имеет любой пользователь с правами администратора, а ко второй — только пользователь с именем "admin". Убедитесь, что ваши пользователи уведомлены о правилах доступа и могут правильно аутентифицироваться, используя данные, которые вы им предоставили.

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

Оцените материал
Добавить комментарий

Капча загружается...