Новый альбом Sigur Ros
Sigur Ros выложили свой новый альбом на Last.fm.
Я послушал и рекомендую всем. Очень свежее, интересное, красивое, немного загадочное, будто сказочное, неземное звучание. Слова песен, видимо, на исландском. Уже на второй композиции очевидно, что понять их невозможно. И это плюс. Голос начинает восприниматься как инструмент в ансамбле. Очень всем рекомендую.
IКона. Стив Джобс
Замечательная книга о Стиве Джобсе. Прочитал сам и всем советую. Кстати, первая книга, которую я прочитал с экрана. С экрана своего Motoming.
apache: аутентификация и авторизация #10: авторитарность
Модули процесса аутентификации (mod_auth_basic , mod_auth_digest) и модули авторизации (mod_authz_user, mod_authz_groupfile) имеют директивы, отвечающие за авторитарность этих модулей: AuthBasicAuthoritative On|Off, AuthzUserAuthoritative On|Off, AuthzGroupFileAuthoritative On|Off. Эти директивы позволяют продолжить процесс аутентификации и авторизации следующим модулям. По-умолчанию эти модули авторитарны, т.е. Auth*Authoritative On.
В модуле mod_auth_basic авторитарность работает следующим образом. Обычно, каждый провайдер аутентификации, перечисленный в директиве AuthBasicProvider, пытается аутентифицировать пользователя и, если пользователь не был найден модулем, доступ будет запрещён с ответом 401 Authorization Required. Выключение авторитарности модуля - AuthBasicAuthoritative Off - для таких случаев позволяет не запрещать сразу доступ, а предоставить возможность аутентифицировать пользователя другим модулям. Например, модулям сторонних производителей, которые не могут быть подключены с помощью директивы AuthBasicProvider. Порядок обработки запроса такими модулями не конфигурируется и определяется в их исходном коде.
Для модуля mod_authz_user, например, отключение авторитарности - AuthzUserAuthoritative Off - позволяет продолжить авторизацию следующим модулям (например, mod_authz_groupfile), если не нашлось информации об аутентифицированном пользователе. Пример:
...
AuthzUserAuthoritative Off
Require user john group developers
Модуль mod_authz_user не сможет авторизовать пользователя tom (так как авторизоваться может только пользователь john) и, так как он неавторитарен, позволит продолжить авторизацию следующему модулю - mod_authz_groupfile, которые проверит, принадлежит ли пользователь tom группе developers.
Если все модули в процессе авторизации не смогли авторизовать пользователя и были неавторитарными, последним отработает модуль mod_authz_default, которые запретит доступ 401 Authorization Required.
apache: аутентификация и авторизация #9: mod_authn_default, mod_authz_default
Модуль mod_authn_default является запасным последнем (fallback) модулем в процессе аутентификации.
Если для запроса нет сконфигурированного модуля аутентифиукации (например, mod_auth_basic с AuthType Basic и далее)
модуль mod_authn_default просто отклоняет любые аутентификационные данные
и прекращает обработку запроса со стастусом 401 Authorization Required. Такое может случится, если, например,
mod_auth_basic неавторитарен (AuthBasicAuthoritative Off - об этом следующем посте) и не смог аутентифицировать
пользователя.
Модуль mod_authz_default является запасным последнем (fallback) модулем в процессе авторизации.
Если для запроса не отработал ни один модуль авторизации (например, mod_authz_user с Require user john),
а такое возможно если в Require были неопознанные требования, например, Require unknown requirement,
модуль mod_authz_default просто прекращает обработку запроса со стастусом 401 Authorization Required.
apache: аутентификация и авторизация #8: mod_authn_anon
Модуль mod_authn_anon позволяет аутентифицировать анонимных пользователей. В качестве имени как правило используется anonymous (но можно выбрать любые другие), в качестве пароля -- email. Этот email может быть сохранён в логе. Совместно с другими провайдерами аутентификации (например, mod_authn_file) модуль mod_authn_anon даёт возможность отслеживать доступ зарегистрированных пользователей и держать сайт открытым для незарегистрированных пользователей.
Пример конфигурации с комментариями:
AuthName "Protected area"
# тип аутентификации
AuthType Basic
# список провайдеров аутентификации, работают последовательно
AuthBasicProvider file anon
# путь к файлу с пользователями для mod_authn_file
AuthUserFile /path/to/your/.htpasswd
# Параметры mod_authn_anon
# может ли имя быть пустым или любым (on или off)
Anonymous_NoUserID off
# может ли пароль (т.е. email) быть пустым (on или off)
Anonymous_MustGiveEmail on
# проверять ли, что введеный пароль есть email (on или off)
Anonymous_VerifyEmail on
# логировать ли email(on или off)
Anonymous_LogEmail on
# список имён анонимных пользователей
Anonymous anonymous guest www test welcome
Require valid-user
Модуль mod_authn_anon может работать только с Basic-аутентификацией. Проверка email
(включается директивой Anonymous_MustGiveEmail on) тривиальна - в строке проверяется
наличие символа '@' и '.'.
apache: аутентификация и авторизация #7: mod_authz_groupfile
Модуль mod_authz_groupfile обеспечивает авторизацию уже аутентифицорованного пользователя по принадлежности его к некоторой группе. Пример:
Require group developers managers
Группы и их члены определяются в простом текстовом файле: в одной строке название группы и после двоеточия имена членов группы через пробел или таб. Пример:
# file /path/to/groupfile
testers: tom tony
developers: jack john
managers: jane bill
Путь к этому файлу определяется директивой AuthGroupFile:
AuthGroupFile /path/to/groupfile
Отметим, что данный выше пример директивы Require полностью аналогичен такой:
Require user jack john jane bill
Использование модуля mod_authz_groupfile позволяет группировать пользователей в группы, и управлять доступом уже на уровне групп.
apache: аутентификация и авторизация #6: mod_authz_host
Отдельное место среди всех авторизаторов занимает модуль mod_authz_host. При обработке запроса этот модуль вызывается раньше любых других модулей аутентификации/авторизации и используется для контроля доступа на основании данных о хосте клиента (имя хоста, адрес) и характеристик запроса (через переменные окружения). Этот модуль, пожалуй, наиболее часто используемый в Апаче для контроля доступа.
Работа модуля определяется директивами: Order, Allow, Deny. Директива Order определяет порядок проверки правил:
Order allow,deny
значит, что первыми будут проверятся правила allow (т.е. разрешающие), потом - правила deny (запрещающие). Если никаких правил нет - действие по умолчанию - запретить всем. Директива
Order deny,allow
значит наоборот. Первыми будут применяться правила deny, потом - allow. Действие по умолчанию - пускать всех. Директивы Allow и Deny задают правила для проверки:
# пускать всех клиентов из зоны .org
Allow from .org
# три идентичных правила: пускать из подсети 192.168
Allow from 192.168
Allow from 192.168.0.0/16
Allow from 192.168.0.0/255.255.0.0
# не пускать с такого ipv6-адреса
Deny from 2001:db8::a00:20ff:fea7:ccea
Правила проверяются до первого совпедния. Правило "совпало", если правило соответствует информации о клиенте. Если правило совпало в цепочке allow - доступ разрешается, если в цепочке deny - запрещается.
apache: аутентификация и авторизация #5: mod_authz_user
Модуль mod_authz_user обеспечивает авторизацию аутентифицированного пользователя. Иначе говоря, пользователю, который успешно прошёл проверку имени/пароля (т.е. успешно аутентифицирован), модуль разрешает или запрещает доступ к запрашиваемому ресурсу.
Модуль проверяет значение директивы Require. Строка
Require valid-user
означает, что модуль будет успешно авторизовать (давать доступ) всем аутентифицированным пользователям. Строка
Require user john tom
означает, что модуль будет успешно авторизовать только пользователей john и tom.
дальше будет.
apache: аутентификация и авторизация #4: mod_authn_file
Рассмотрим работу модуля mod_authn_file. Этот модуль является провайдером аутентификации для таких модулей как mod_auth_basic или mod_auth_digest. Аутентификация происходит путём поиска пары пользователь/пароль в текстовом файле. Такой файл можно создать руками, а можно с помощью утилиты htpasswd. Команда
htpasswd -c /path/to/passwdfile user1
предложит ввести пароль для пользователя user1 и создаст файл по указанному пути такого содержания:
user1:$apr1$9Y3.....$4fT.9GPTLwu4zwNTJ9HoE0
Для шифрования паролей утилита htpasswd для Windows по умолчанию использует md5, а для unix-систем - crypt(). Опционально пароли можно шифровать с помощью SHA1 или не шифровать вообще, например так:
user2:pass2
Для того, что бы аутентификация происходила с помощью этого модуля необходимо указать
AuthBasicProvider file
# или
AuthDigestProvider file
и путь к файлу с паролями
AuthUserFile /path/to/file
Путь может быть абсолютным или относительным от ServerRoot.
Этот провайдер аутентификации используется чаще всего: просто и
быстро, к тому же файл с паролями можно править руками (например,
закомментировать с помощью # любого пользователя). Недостаток -
медленная работа при большом количстве пользователей. В целях
безопасности не следует помещать файл с паролями в дерево директорий
сайта.
дальше будет.
apache: аутентификация и авторизация #3: mod_auth_basic
Рассмотрим как работает mod_auth_basic. Содержимое .htaccess в директории /var/www/private/,
соответствующей uri /private/:
# Тип аутентификации
AuthType Basic
# Имя зоны, для которой необходима аутентификация,
# Иначе называется realm
AuthName "private zone"
# Провайдер аутентификации. В данном случае - mod_authn_file
AuthBasicProvider file
# Информация для mod_authn_file - путь к файлу с именами и паролями,
# Такой файл создаётся с помощью утилиты htpasswd или вручную - рассмотрим позже.
AuthUserFile /etc/apache2/conf/.htpasswds
# Доступ будет разрешён аутентифицированному пользователю john,
# т.е. будет авторизован только пользователь john.
Require user john
Происходит запрос в /private/. При обработке запроса на этапе проверки доступа начинает
работать модуль mod_auth_basic. Он в запросе ищет заголовок Authentication. Если заголовка нет -
модуль прекращает обработку запроса и сервер возвращает ответ со статусом 401 Unauthorized и
заголовком WWW-Authenticate: Basic realm="private zone". Браузер, получив такой ответ,
выдаёт приглашение для ввода имени пользователя и пароля для зоны 'private zone'. Получив
аутентификационные данные, браузер посылает такой же запрос с заголовком Authentication.
Имя пользователя и пароль кодируются в base64-кодировку так:
base64encode('john:secret') -> 'am9objpzZWNyZXQ='
и получается такой заголовок:
Authentication: Basic am9objpzZWNyZXQ=
Теперь, при обработке запроса, mod_auth_basic из заголовка Authentication получит аутентификационные данные:
base64decode('am9objpzZWNyZXQ=') -> 'john:secret'
Эти имя пользователя и пароль mod_auth_basic передаст провайдеру аутентификации (в нашем случае mod_authn_file) для проверки. При успешной проверке, запрос продолжит обрабатываться, при неуспешной mod_auth_basic опять прекратит обработку запроса с 401 Unauthorized.
Дальще будет.
