Блог - 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-04-06 05:35:44 | #

    Самые известный секс стимуляторы для Мужчин и Женщин по очень низким ценам

  9. 2017-04-20 19:48:01 | #

    где купить обои в рязани замбаити

  10. 2017-04-22 22:41:19 | #

    Он отличается строгой формой волны и достаточной прочностью.Только, даже сравнив причина в таблице, исполнять окончательный умозаключение о часть, какие надежда блоков лучше для строительства дома, надо учесть и такой важный параметр, как достоинство всего процесса.Этим пользуются около необходимости создать имитацию стены собранной из бруса, следовательно большая обрубок вагонки «Штиль» выпускается утолщенной перед 25 мм и беспрепятственно может использоваться чтобы облицовки фасадов зданий.Отдельная установка потребует сверление двери, сколько не желательно.диаметром не более 6 мм, 2 шт.трещины и сколы на сучках со стороны гребня и со стороны паза для нижней кромке, которые незаметны в собранном виде.мелкие шероховатости и углубления на кромке в области сучков.Вагонка «Ландхаус»
    кирпич-декор.рф/cat/stenovie-materialy/ceramic-brick/ — размер керамического кирпича
    стеновый материал
    облицовка клинкерным кирпичом

    Покрытие из пластизола alias пуралаСамые прочные в линейке.Ожидание вагонки, тонкой строганой доски ради обшивки поверхностей, ради отечественного покупателя в первую очередь делятся для обычную и евро.Даже самое дорогое покрытие не лишено недостатков.Профнастил под деревоПрямое попадание влаги для эти места двери маловероятно, однако через них двери могут накапливать влагу из помещения.Этот вопрос должен решить предварительно тем точно выбрать двери чтобы ванной и туалета.На конструкциях заборов и оград листы профнастила располагаются вертикально, сколько определяет распределение внешних сил — для плоскость практически не воздействует ни авторитет материала, ни снеговые иначе дождевые нагрузки.

  11. sillKizSussy
    2017-05-18 23:00:26 | #

    На нашем первом мастер-классе мы решили рассмотреть способы написания отзывов для литературные произведения. Почему именно с этого мы хотим начать, спросите вы? Давайте вспомним, для сколько вы обращаете уважение в первую очередь, когда хотите прочитать книгу, посещать для спектакль или посмотреть фильм? Правильно, для отзывы! Мы рекомендуем книги разве фильмы своим друзьям, даем оценку, советуем, а потом вообще спорим и обсуждаем увиденное иначе прочитанное. Мы ориентируемся для отзывы и решаем для себя, хотим посмотреть сей фильм или прочитать книгу разве лучше не тратить на эту бесполезную посредственность свое драгоценное время. Только лозунг ждут не как читатели или зрители, лозунг ждут и авторы. Вспомните, когда фильм alias диссертация нам понравились, мы с нетерпением ждем продолжения истории, следим изза работой авторов, строим планы и догадки. Коль составитель получает положительную обратную сцепление от читателя разве зрителя, то он пьяный и дальше ради нас творить. И чем больше отзывов получает композитор, тем больше стимула у него вносить новые книги и сценарии для кинофильмов. Отзывы чтобы автора — это своего рода наркотик, кто питает его вдохновение, стимулирует фантазию и заставляет черкать, писать и кроме раз писать. Хотите получить через автора новую главу тож плод — оставляйте автору отзывы, причинность, вроде говорится, отрицание отзывов — недостает новых текстов. И помните о друзьях, рекомендуйте им книги! Думаю, что отдельно замяться на рецензировании мы не будем, кто хочет изучить наука единовластно — гугль вам в помощь. Я только скажу, что в любой рецензии делается сравнительный анализ с другими аналогичными произведениями, расширенный испытание самого текста, рассматриваются стиль написания, конструкция сюжета, наречие текста и мотивация героев. Здесь нам нужны отличные знания сообразно литературе разных направлений и жанров, не менее отличные знания по истории литературы и тенденциям ее развития следовать последние десятилетия, страна всякими литературоведческими терминами и прочая, и прочая. Всё это требует глобальной работы и вдумчивости. http://video21veka.ru/braslet-poxudeniya/ Следите ради тем, на что Вы тратите свое рабочее и свободное время. Отмечайте занятия, которые являются пожирателями Вашего времени (скажем, обсуждение новостей с коллегами, бесцельное переключение каналов телевизора разве чтение рекламных листовок и газет).

  12. 2017-05-24 21:56:12 | #

    Показатели ТИЦ и PR не меняются непрерывно, обычно среди пересчётами этих показателей проходит больше месяца, и, как бы рьяно вы не раскручивали особенный сайт, его ТИЦ и PR не изменится накануне очередного пересчёта.
    Не секрет, который мобильные версии сайтов завсегда упрощены, и определенной информации, которая затрапезничать для веб-сайте может не оказаться в мобильной его версии.
    «Отзывчивый» дизайн соединяет в себе черты адаптивного и резинового дизайнов — он автоматически подстраивается под любую ширину экрана, якобы и резиновый, присутствие этом, в процессе подстраивания может меняться расположение блоков, размер картинок, могут являться, пропадать или изменяться некоторые элементы (примерно, обычное горизонтальное список может поменяться для выпадающее и т.
    Хороших результатов в этом деле противопоказуется добиться, изучая правила, копируя чужие находки, используя готовые элементы и т.
    Это крайне неинформативно.
    Желательно, для на сайте весь не было ничто лишнего.
    И здесь важно: на чём задержится уважение пользователя (и задержится ли?).
    Может пребывать, вам надо произнести какую-то речь чтобы пользователей или в вашем обзоре присутствует аудиокомпонент.

    http://создание-сайтов161.рф/kontekstnaya-reklama.html — контекстная реклама яндекс
    http://создание-сайтов161.рф — сайт под ключ
    http://создание-сайтов161.рф — создание сайтов в ростове на дону

    «HyperText Markup Vernacular», что в переводе на русский означает «стиль гипертекстовой разметки».
    yandex) нужно обратить особое внимание.
    А представители компании Google официально рекомендовали пользоваться адаптивные варианты дизайна.
    Основная его редкость в часть, который ширина колонок задаётся в процентах, а не в пикселях, следовательно «резиновый» дизайн быть любом разрешении монитора растягивается для всю ширину экрана.
    Не запутывайте пользователя множеством версий: избегайте соблазнять пользователя множеством версий вашего веб-сайта.
    Частая неловкость оптимизаторов — неполный для всех страниц.
    Также наберитесь опыта в установке скриптов и научитесь настраивать дизайны.
    Владельцы же блогов, которые не зависят через всяких сервисов, лишены многих возможностей.

  13. GregoryAbelf
    2017-05-24 23:35:04 | #

    Произвольное слезотечение, склонности к воспалению слизистой и отечности глазища – это явные противопоказания к наращиванию.
    При умывании соблюдайте аккуратность.
    Если снимете наращённые ресницы, может заболевать, который приманка стали короче, однако это тоже не так, просто вы уже привыкли к длинным и свои вам зреть не привычно.
    Чтобы смола схватилась должным образом и реснички держались крепче впоследствии наращивания чтобы желание пару часов не мочите и не трогайте ресницы, не парьте харя пару суток.
    Чтобы начинающих мастеров более удачным решением довольно выбор именно готового набора – в этом случае не потребуется повизитно искать материалы и инструменты одной фирмы, посещая порядком разных магазинов.
    Наращивание ресниц
    Это пучковое, поресничное и ленточное наращивание.
    И коррекция, и постоянные наращивания средства не сэкономят, особенно, коли это услуги класса премиум.

    курсы наращивания ресниц москва
    https://mlashes.ru/ — наращивание ресниц
    наращивание ресниц

    Средства ради снятия макияжа, кремы для лица и составы ради очищения могут смешаться с клейкими основами и привести к выпадению наклеенных ресниц.
    Длина наращивания ресниц подбирается в зависимости от индивидуальных особенностей и пожеланий клиента.
    Тушью пользуются многие, только не всегда даже самая модная удлиняющая щеточка позволяет достичь желаемого результата.
    Его снова называют — ресничка к ресничке.
    Многие из вас сталкивались с накладными ресницами, которые клеятся одновременно полоской на линию роста приманка около помощи специального клея, но наращивание подразумевает приклеивание одной сиречь пучка из на одну свою ресницу.
    Наращенные ресницы — это сиречь некогда та вещь, которая призвана облегчить ежедневную работу над своим образом.
    Их чуть легонько промокают нежирными имущество для снятия макияжа либо водой.
    Сообразно итогам аттестации вам выдадут именной сертификат.