Конфигурировал CUPS, в процессе возникла непонятка с директивой Order, которая устанавливает порядок чтения из директив Allow и Deny. На apache.ru есть об этом информация, но не полная и с опечаткой/ошибкой. Я перевёл статью с httpd.apache.org + спроецировал материал на локальные сети. Авось пригодится кому-нить.
Итак, директива Order, вместе с директивами Allow и Deny, контролирует трёх-шаговую систему контроля доступа. Первый шаг обрабатывает или все директивы Allow, или все директивы Deny. Второй шаг разбирает оставшуюся директиву (Deny или Allow). Третий шаг принимает все запросы, которые не соответствуют ни первой, ни второй.
Обратите внимание, что все директивы, Allow и Deny, обрабатываются, нетипично поведению сетевых экранов (firewall), где используется только первая директива. Результирующим является последнее соответствие (также нетипично поведению сетевых экранов).
В данном примере, если пытаться следовать логике firewall, запрет доступа реализован для всех хостов, и разрешение 192.168.1.* не сработает, в то время, как в соответствии с принципами рассматриваемых конфигурационных файлов apache (в том числе cupsd.conf) доступ хостам из подсети 192.168.1.* разрешён.
Дополнительно, порядок, в котором строки следуют в конфигурационном файле не существенен — все строки Allow выполняются как единая группа, все строки Deny, соответственно, как другая группа, и умолчательное состояние рассматривается отдельно.
Порядок может быть одним из:
Allow,Deny
Сперва, проверяются все директивы Allow; по крайней мере одна должна соответствовать, или запрос отвергается. Далее, провеляются все директивы Deny. Если какие-либо соответствуют, то запрос отвергается. Вконце, любой запрос, который не соответствует директиве Allow или Deny отвергается по умолчанию.
Deny,Allow
Сперва, проверяются все директивы Deny; если какая-либо соответствует, то запрос отвергается, если нет соответствия в директиве Allow. Любой запрос, который не соответствует директиве Allow или Deny пропускается.
Ключевые слова могут быть разделены только запятой, никакие пробелы между ними не допустимы.
В нижеприведённом примере, всем хостам в подсети 192.168.1.* доступ разрешён.
В следующем примере, всем хостам из подсети 192.168.1.* доступ разрешён, за исключением хостов 192.168.1.5 и 192.168.1.24, всем другим хостам из других подсетей доступ запрещён, т.к. для сервера состояние по умолчанию Deny, отказать в доступе.
С другой стороны, если порядок в директиве Order в последнем примере поменять на Deny,Allow, всем хостам доступ будет разрешён. Это случится потому, что не считая актуальным следование директив в конфигурационном файле, данная директива Allow из 192.168.1.* будет сверена последней, и перекроет отказ в доступе с 192.168.1.5 и 192.168.1.24 директивы Deny. Всем хостам не из 192.168.1.* также будет разрешён доступ, т.к. состояние по умолчанию — Allow.
Оригинал
Какие-то моменты могут быть непонятны после первого прочтения, однако, их тщательный разбор, шаг за шагом, не оставит у изучающего сомнений. Всё логически верно.
Итак, директива Order, вместе с директивами Allow и Deny, контролирует трёх-шаговую систему контроля доступа. Первый шаг обрабатывает или все директивы Allow, или все директивы Deny. Второй шаг разбирает оставшуюся директиву (Deny или Allow). Третий шаг принимает все запросы, которые не соответствуют ни первой, ни второй.
Обратите внимание, что все директивы, Allow и Deny, обрабатываются, нетипично поведению сетевых экранов (firewall), где используется только первая директива. Результирующим является последнее соответствие (также нетипично поведению сетевых экранов).
Order Deny,Allow
Deny from all
Allow from 192.168.1.*
В данном примере, если пытаться следовать логике firewall, запрет доступа реализован для всех хостов, и разрешение 192.168.1.* не сработает, в то время, как в соответствии с принципами рассматриваемых конфигурационных файлов apache (в том числе cupsd.conf) доступ хостам из подсети 192.168.1.* разрешён.
Дополнительно, порядок, в котором строки следуют в конфигурационном файле не существенен — все строки Allow выполняются как единая группа, все строки Deny, соответственно, как другая группа, и умолчательное состояние рассматривается отдельно.
Порядок может быть одним из:
Allow,Deny
Сперва, проверяются все директивы Allow; по крайней мере одна должна соответствовать, или запрос отвергается. Далее, провеляются все директивы Deny. Если какие-либо соответствуют, то запрос отвергается. Вконце, любой запрос, который не соответствует директиве Allow или Deny отвергается по умолчанию.
Deny,Allow
Сперва, проверяются все директивы Deny; если какая-либо соответствует, то запрос отвергается, если нет соответствия в директиве Allow. Любой запрос, который не соответствует директиве Allow или Deny пропускается.
Ключевые слова могут быть разделены только запятой, никакие пробелы между ними не допустимы.
Соответствие | Результат Allow,Deny | Результат Deny,Allow |
---|---|---|
Соответствует только Allow | Запрос разрешён | Запрос разрешён |
Соответствует только Deny | Запрос отклонён | Запрос отклонён |
Нет соответствий | По умолчанию действует вторая директива: отклонён | По умолчанию действует вторая директива: разрешён |
Соответствуют обе Allow & Deny | Управляет конечное соответствие: отклонён | Управляет конечное соответствие: разрешён |
В нижеприведённом примере, всем хостам в подсети 192.168.1.* доступ разрешён.
Order Deny,Allow
Deny from all
Allow from 192.168.1.*
В следующем примере, всем хостам из подсети 192.168.1.* доступ разрешён, за исключением хостов 192.168.1.5 и 192.168.1.24, всем другим хостам из других подсетей доступ запрещён, т.к. для сервера состояние по умолчанию Deny, отказать в доступе.
Order Allow,Deny
Allow from 192.168.1.*
Deny from 192.168.1.5
Deny from 192.168.1.24
С другой стороны, если порядок в директиве Order в последнем примере поменять на Deny,Allow, всем хостам доступ будет разрешён. Это случится потому, что не считая актуальным следование директив в конфигурационном файле, данная директива Allow из 192.168.1.* будет сверена последней, и перекроет отказ в доступе с 192.168.1.5 и 192.168.1.24 директивы Deny. Всем хостам не из 192.168.1.* также будет разрешён доступ, т.к. состояние по умолчанию — Allow.
Оригинал
Какие-то моменты могут быть непонятны после первого прочтения, однако, их тщательный разбор, шаг за шагом, не оставит у изучающего сомнений. Всё логически верно.