Блог - Linux, программирование, Я!

linux на сервереBasic HTTP авторизация для Nginx

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

Давайте для примера создадим отдельный поддомен для хранения секретной информации с доступом по логину/паролю и в нагрузку в ней будут директория для доступа к которой понадобится дополнительная пара логин/пароль и директория с включенным листингом файлов тоже с отдельным доступом. Т.е. структура примерно такая:
/ (доступ к файлам по _логин-пароль_1)
--otherpass/ (доступ к файлам по _логин-пароль_2)
--listed/ (включен автоиндекс файлов, т.е. можнго просмотреть какие файлы тут лежат, доступ к файлам по _логин-пароль_3)

Создадим виртуалхост Nginx

Допустим, для поддомена adminka.example.com. Для этого создадим файл

sudo nano /etc/nginx/sites-available/adminka.example.com

со следующим содержимым:

server {
        listen   80;
        server_name  adminka.example.com;
        access_log  /var/log/nginx/adminka_example_com.log;#можно написать /var/log/nginx/$host.log но придется заранее создать лог-файл и выставить на него правильные права
        root   /var/www/$host/htdocs;
        index  index.html index.htm index.php;
}

Ок, сохраняем, делаем этот хост доступным (включаем в конфиг нджинкса):

sudo ln -s /etc/nginx/sites-available/adminka.example.com /etc/nginx/sites-enabled/adminka.example.com

Создаем директории для htdocs

mkdir /var/www/{adminka.example.com,adminka.example.com/htdocs,adminka.example.com/htdocs/{otherpass,listed}

Если кто не понял, эта команда делает то же, что и 4 следующие:

mkdir /var/www/adminka.example.com
mkdir /var/www/adminka.example.com/htdocs
mkdir /var/www/adminka.example.com/htdocs/otherpass
mkdir /var/www/adminka.example.com/htdocs/listed

Рестартим Nginx

sudo service nginx configtest
sudo service nginx restart

Проверяем: http://adminka.example.com/
Ага

403 Forbidden
nginx/0.7.64

Пароли не просит, листинг директории у нас не включен и index файла мы не создавали. То же самое для директорий otherpass и listed. Соответственно получаем 403 ошибку "доступ запрещен".

Добавим листинг (если нужен)

Мы договорились, что в директории listed у нас разрешен просмотр содержимого директории... Редактируем конфиг

sudo nano /etc/nginx/sites-available/adminka.example.com
server {
  listen   80;
        server_name  adminka.example.com;
        access_log  /var/log/nginx/adminka_example_com.log;
        root   /var/www/$host/htdocs;
        index  index.html index.htm index.php;
        location /listed/ {
                autoindex on;
        }
}

Сохраняем, перезапускаем, пробуем: http://adminka.example.com/listed/
Ага, работает:

Index of /listed/
_________
../
_________

Но где же обещанные пароли? Спокойно, сейчас все будет!

Добавляем Basic HTTP authorization.

Пароли для разных директорий будем хранить в разных htpasswd файлах за пределами htdocs. Например так:

/var/www/adminka.example.com/
--/root_htpasswd
--/listed_htpasswd
--/otherpass_htpasswd
server {
  listen   80;
        server_name  adminka.example.com;
        access_log  /var/log/nginx/adminka_example_com.log;
        root   /var/www/$host/htdocs;
        index  index.html index.htm index.php;
        location / {
                auth_basic "Unauthorized"; # текст сообщения сервера с предложением ввести пароль
                auth_basic_user_file /var/www/$host/root_htpasswd; # путь к htpasswd файлу
        }
        location /listed/ {
                auth_basic "Unauthorized";
                auth_basic_user_file /var/www/$host/listed_htpasswd;
                autoindex on;
        }
        location /otherpass/ {
                auth_basic "Unauthorized";
                auth_basic_user_file /var/www/$host/otherpass_htpasswd;
                autoindex on;
        }
}

Создаем htpasswd файлы (см. далее), сохраняем, перезапускаем, проверяем!

Генерация хеша пароля

HTTP авторизация в Nginx работает так же как и в Apache, т.е. с использованием htpasswd файла, но с тем лишь ограничением, что для шифрования пароля можно использовать только стандартный алгоритм DES с двухсимвольной солью. В Linux для этого используется C-функция crypt() (см man 3 crypt).

Можно использовать утилиту htpasswd из комплекта поставки Apache

htpasswd -nd seriy
New password:
Re-type new password:
seriy:4lQ0JcanrGr9E

Вывод этой утилиты состоит из 3-х частей: первая, до двоеточия "seriy" - это имя пользователя, "4l" - это двухсимвольная соль для функции crypt() и остальная часть "Q0JcanrGr9E" - это сам хеш пароля. Единственная проблема такого подхода - придется устанавливать apache.

Вот пара примеров кода для генерации htpasswd ( your_password - ваш пароль, salt - соль для пароля, должна содержать 2(!!!) символа из набора "./0-9A-Za-z"):
используя php:

php -r 'echo crypt("your_password", "salt");'

используя Python:

python -c 'import crypt; print crypt.crypt("your_password", "salt")'

Если кто предложит примеры на других языках - (perl, ruby) буду благодарен. Возможно для этого можно использовать утилиту mcrypt но я в ней не смог разобраться.

В завершение - вот простенькая веб-формочка для генерации htpasswd онлайн.

  1. 2010-06-04 14:03:12 | #

    […] PS пишет: server { listen 80; server_name adminka.example.com; access_log /var/log/nginx/adminka_example_com.log;#можно написать /var/log/nginx/$host.log но придется заранее создать лог-файл и выставить на него правильные права root … htpasswd -nd seriy New password: Re-type new password: seriy:4lQ0JcanrGr9E. Вывод этой утилиты состоит из 3-х частей: первая, до двоеточия «seriy» – это имя пользователя, «4l» – это двухсимвольная соль для функции crypt() и остальная часть … […]

  2. 2012-02-27 05:42:37 | #

    А вот так осуществляется контроль доступа к файлам на Nginx и PHP:
    http://odiszapc.ru/2012/02/26/nginx-access/

  3. rock
    2012-09-14 03:12:46 | #

    Что тут писать-то?

                        #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from sys import argv
    from random import choice
    from string import ascii_letters, digits
    from getpass import getpass
    from crypt import crypt
    
    if __name__=="__main__":
            name = argv[1:2]
            if not name:
                    print "Введите имя пользователя:",
                    name = raw_input()
                    if not name:
                            print "ОШИБКА: Введите имя пользователя."
                            exit(1)
            else:
                    name = name[0]
    
            salt = ''.join(choice(ascii_letters.join(digits)) for char in range(2))
    
            passwd = getpass("Введите пароль: ")
            if not passwd == getpass("Введите пароль еще раз: "):
                    print "ОШИБКА: Пароль и подтверждение не совпадают."
                    exit(2)
    
            passwdHash = crypt(passwd, salt)
    
            print name + ':' + passwdHash
    
            exit(0)
                      
  4. Incognito
    2012-12-18 16:51:16 | #

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

  5. Павел
    2013-08-03 05:11:00 | #

    Апач устанавливать не нужно, достаточно установить apache2-utils.
    Для Debian Linux:
    aptitude install apache2-utils

  6. Дмитро Раби
    2013-12-20 13:38:17 | #

    На crypt на ruby:
    'password'.crypt('salt')

    • Дмитро Раби
      2013-12-20 13:39:09 | #

      Парсер лох, ковычки нужны одинарые или двайные «лапки»

  7. mad_crack
    2014-01-21 18:25:28 | #

    Каталоги можно сделать командой покороче, если использовать ключик -p

    mkdir -p /var/www/adminka.example.com/htdocs/{otherpass,listed}

  8. 2017-07-25 04:36:50 | #

    Продам мопед.

  9. 2018-04-18 00:54:10 | #

    Выезд ребенка следовать границу без нотариально удостоверенного согласия второго из родителей возможен только присутствие наличии одного из оснований:Следовательно, уплата алиментов имеет необходимый фасон, все до непосредственного поступления средств получателю от плательщика (именно таким образом в дальнейшем мы будем именовать эти стороны алиментных отношений), в случае нежелания последнего, первый должен выздоравливать достаточно тернистый путь.Указанный судебный акт наталкивает для размышления о том, возможно ли применение принципа невозможности двойного привлечения к ответственности после одно и то же правонарушение (какой в доктрине и международных правовых актах также гласный подобно non bis in idem) в налоговых правоотношениях. Согласие Структуры, средства фактически перечисляются уполномоченным банком уже после того, словно товар поступил в Украину, в качестве погашения кредита по кредитному договору, заключенному между уполномоченным банком и иностранным банком-кредитором. Поскольку наличие в стационарном кафе сиречь ресторане туалета ради посетителей является обязательным, взимание платы после пользование туалетом администрацией незаконно. Буде к АО присоединяются изрядно обществ, АО может брать участие в процессе присоединения лишь с другими АО. Впрочем налоговая не приводит никаких аргументов в пользу того, сколько приговор договора переуступки прав требования долга плательщиками единого налога являются формой расчета сообразно договору купли-продажи товаров (работ, услуг) не в денежной форме.Итак, объективная качество обоих составов нарушений содержит элемент наличии разве возможности наличия ложных представлений (путаницы тож введение в неправильность) потребителей об определенных весть, сообщенные предприятием. Даже больше, ни одна территория в мире не назвала использование оффшоров нелегальным методом ведения бизнеса. План такого закона также предусматривает мочь этого оговорка в договоре среди сторонами спора. 60 ТК РФ.в некоторых случаях подтвердить превышение работником полномочий при привлечении его к уголовной либо административной ответственности.Взяв ради основу примеры различных должностных инструкций, необходимо разработать такой документ, кто будет определять задачи вашей компании, учитывая ее структуру, сферу деятельности и другие особенности. Пожалуй, важнейшим условием в настоящее время станет получение паспорта для выезда ради границу. 4 призвана остерегать деловую репутацию субъектов хозяйствования, имеющих приоритет в использовании обозначений, через неправомерных посягательств других участников рынка. Действие предполагает, сколько доминирующий акционер имеет преимущество направить обществу публичное безотзывное спрос о приобретении акций у всех остальных владельцев акций общества совместно с копией договора, заключенного с банковским учреждением, у которой открыт счет условного хранения (эскроу).
    юрист по земельным вопросам
    развод через суд
    https://juristkrasnodar.com/uslugi/yuridicheskoe-soprovozdenie.htm — закрытие ип

    В своей судебной практике Высший Испытание (кроме – ВС) присутствие разрешении налоговых споров принимает во почтение материалы досудебного расследования как доказательства. Надеюсь, в него будут включены и системные меры сообразно устранению языкового барьера и повышение владения английским языком между национальных предпринимателей и государственных служащих.Закусить существенная различие между тем, когда трагедия насилия произошел однократно и больше не повторялся сиречь проявлялся в виде словесных оскорблений и угроз перед влиянием неконтролируемых эмоций, alias коль причиной такого поведения было алкогольное опьянение, которое не связано с алкоголизмом и не является типичным поведением другого из супругов, а результатом стало наличие незначительных синяков у жертвы и оскорбление, а также тем, когда самовольство в семье стало нормой повседневной жизни, буде агрессор не желает понимать противоправность своих действий и считает их нормальными, если причинами такого поведения являются алкоголизм, наркотическая alias иная неволя, иначе буде дар в результате противоправных действий получает значительные физические и психологические травмы и вынуждена обращаться изза помощью к врачам и тому подобное. Для практике это означает, который спор по исковому заявлению матери ребенка о желании брать алименты в твердой денежной сумме alias в доле от дохода довольно принимать соответствующее приговор о способе взыскания, независимо через наличия официального трудоустройства сиречь меняющегося, нерегулярного дохода плательщика алиментов. В результате использования этого механизма должник освобождается через соответствующего долгового обязательства предварительно кредитором и получает возможность восстановить иначе улучшить свое финансово-экономическое сословие, а кредитор становится участником/акционером общества и получает возможность отдавать приманка имущество в виде, в частности, дивидендов. Около этом очередь, в которую сожитель сообразно закону успадковуватиме пожитки умершего, разнится в зависимости через страны. Социально-педагогическая подвиг имеет вид кураторства и помогает семьям в решении проблем и кризисов в сотрудничестве с социальным педагогом.При проведении собрания нужно разделять информацию относительно каждого отдельного перечня (реестра), поскольку регистрация акционеров (их представителей) осуществляется на основании нескольких перечней (реестров) акционеров.В этой статье мы рассмотрим единственный из механизмов, наподобие грамотно и однозначно ответить для указанный урок, что позволит вам отсеять «демагогов» еще на этапе приема для работу, который это гораздо упростит работу коллектива и испытание результатов руководителю. Следовательно желающие инвестировать в сельскохозяйственное действие лупить всегда. Беспричинно, согласно ч. Следственно, плательщики единого налога могут исполнять операции по уступке права требования, а расчеты сообразно таким операциям будут заботиться денежными. Когда возникает обязанность выплачивать астрент?требования по возврату затем прекращения действия договора о партнерстве объекта государственно-частного партнерства и земельных участков, которые предоставлены для нужд, связанных с осуществлением такого партнерства;

    земельные споры