Order Allow,Deny или Deny,Allow??? / Хабр

themazay

Время на прочтение 3 мин

Количество просмотров 9.7K

Конфигурировал CUPS, в процессе возникла непонятка с директивой Order, которая устанавливает порядок чтения из директив Allow и Deny. На apache.ru есть об этом информация, но не полная и с опечаткой/ошибкой. Я перевёл статью с httpd.apache.org + спроецировал материал на локальные сети. Авось пригодится кому-нить.

Итак, директива 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.

Оригинал

Какие-то моменты могут быть непонятны после первого прочтения, однако, их тщательный разбор, шаг за шагом, не оставит у изучающего сомнений. Всё логически верно.

Теги:

  • linux
  • config
  • access
  • apache
Хабы:

  • Чулан

Apache 2.4 Order, Allow or Deny / WEB / Электроника (современная)

After upgrade my apache server to version 2.4 i have a problem.
Syntax error in line like Order deny,allow Deny from all
Problem in depricated Orders.

Access control
In 2.2, access control based on client hostname, IP address, and other characteristics of client requests was done using the directives Order, Allow, Deny, and Satisfy.

In 2.4, such access control is done in the same way as other authorization checks, using the new module mod_authz_host. The old access control idioms should be replaced by the new authentication mechanisms, although for compatibility with old configurations, the new module mod_access_compat is provided.

Mixing old and new directives
Mixing old directives like Order, Allow or Deny with new ones like Require is technically possible but discouraged. mod_access_compat was created to support configurations containing only old directives to facilitate the 2.4 upgrade. Please check the examples below to get a better idea about issues that might arise.

Here are some examples of old and new ways to do the same access control.

In this example, there is no authentication and all requests are denied.
2.2 configuration:


Order deny,allow
Deny from all
2.4 configuration:

Require all denied

In this example, there is no authentication and all requests are allowed.
2.2 configuration:

Order allow,deny
Allow from all
2.4 configuration:


Require all granted
In the following example, there is no authentication and all hosts in the example. org domain are allowed access; all other hosts are denied access.
2.2 configuration:


Order Deny,Allow
Deny from all
Allow from example.org
2.4 configuration:

Require host example.org
In the following example, mixing old and new directives leads to unexpected results.
Mixing old and new directives: NOT WORKING AS EXPECTED

DocumentRoot "/var/www/html"
<Directory "/">
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Location "/server-status">
    SetHandler server-status
    Require local
</Location>

access.log - GET /server-status 403 127.0.0.1
error.log - AH01797: client denied by server configuration: /var/www/html/server-status

Why httpd denies access to servers-status even if the configuration seems to allow it? Because mod_access_compat directives take precedence over the mod_authz_host one in this configuration merge scenario.

This example conversely works as expected:
Mixing old and new directives: WORKING AS EXPECTED


DocumentRoot "/var/www/html"

<Directory "/">
    AllowOverride None
    Require all denied
</Directory>

<Location "/server-status">
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow From 127.0.0.1
</Location>
access.log — GET /server-status 200 127.0.0.1

So even if mixing configuration is still possible, please try to avoid it when upgrading: either keep old directives and then migrate to the new ones on a later stage or just migrate everything in bulk.

In many configurations with authentication, where the value of the Satisfy was the default of ALL, snippets that simply disabled host-based access control are omitted:
2.2 configuration:


Order Deny,Allow
Deny from all
AuthBasicProvider File
AuthUserFile /example. com/conf/users.passwd
AuthName secure
Require valid-user
<strong>2.4 configuration:</strong>
# No replacement needed
AuthBasicProvider File
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

In configurations where both authentication and access control were meaningfully combined, the access control directives should be migrated. This example allows requests meeting both criteria:
2.2 configuration:

Order allow,deny
Deny from all
# Satisfy ALL is the default
Satisfy ALL
Allow from 127.0.0.1
AuthBasicProvider File
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user
2.4 configuration:
AuthBasicProvider File
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user
Require ip 127.0.0.1

In configurations where both authentication and access control were meaningfully combined, the access control directives should be migrated. This example allows requests meeting either criteria:
2.2 configuration:

Order allow,deny
Deny from all
Satisfy any
Allow from 127.0.0.1
AuthBasicProvider File
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user
2.4 configuration:


AuthBasicProvider File
AuthUserFile /example.com/conf/users.passwd
AuthName secure
# Implicitly <RequireAny>
Require valid-user
Require ip 127.0.0.1
Конфигурация

— директива отказа apache не работает

спросил

Изменено 4 года, 9 месяцев назад

Просмотрено 13 тысяч раз

Решение: Я должен поместить директивы разрешения/запрета в первую директиву каталога (которая также предназначена для корня). Я предполагаю, что это потому, что у него есть AllowOverride None, который не позволяет ни одному ребенку указывать разрешить/запретить?

<Каталог />
    Параметры
    Аллововеррайд
    Порядок разрешить, запретить
    Разрешить от всех
        Запретить от xxx.xx.xxx.xx

 

Оригинал:

Эта конфигурация по-прежнему разрешает доступ ко всем IP-адресам после перезапуска apache

 
    Имя сервера www.xxx.com
    Корень документа /var/www/vhosts/xxx
    <Каталог /var/www/vhosts/xxx>
        Индексы опционов FollowSymLinks
        AllowOverride нет
        Отклонить заказ, разрешить
        Запретить от всех
        Разрешить с 127.0.0.1
    

 
  • apache-2.2
  • конфигурация
2

Должно сработать. Я только что проверил ваш код на своем сервере, чтобы убедиться, что я не сошел с ума. Вы уверены, что у вас нет определения перед этим, которое имеет приоритет?

Создайте тестовый файл в папке на вашем сервере. Что-то вроде test.txt. Вы можете обнаружить, что не видите его при загрузке этого URL-адреса в браузере. Если это так, то ваше определение выше пропускается.

3

Для того, что вы хотите сделать, то есть разрешить только 127.0.0.1, вы должны сделать следующее:

 Заказать Разрешить, Запретить
Разрешить с 127.0.0.1
 

Сначала разрешает вещей, затем запрещает вещей, а запрещает вещей, которые не соответствуют друг другу.

Также не следует размещать блок внутри блока , но перед ним.

2

Это система Plesk? Иногда приходится смотреть, как компилируются различные http-включения. У вас может быть что-то в более позднем включаемом файле, который перезаписывает ваш первый оператор.

Спасибо. этот код работает.

NameVirtualHost 127.0.0.1

NameVirtualHost 192.168.44.141

  0.0.1 192.168.44.141>
#имя_сервера localhost.com
    Имя сервера www.localhost.com
DocumentRoot "E:/abcd"
<Каталог "E:/abcd/files">
    Индексы опционов FollowSymLinks
        AllowOverride нет
    Порядок разрешить, запретить
    Разрешить с 192.168.44.128
    Запретить от всех
  
 
 
1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Apache «Запретить, разрешить» или «Заказать разрешить, запретить» — Блог системного администратора

Оставить комментарий / Апач / Автор Йобст Шмаленбах

Если вы хотите ограничить доступ к частям вашего сайта на основе адреса хоста ваших посетителей, это проще всего сделать с помощью mod_authz_host

9Директивы 0039 Allow и Deny позволяют разрешать и запрещать доступ на основе имени хоста или адреса хоста машины, запрашивающей документ. Директива Order идет рука об руку с этими двумя и сообщает Apache, в каком порядке применять фильтры.

Например:

Разрешить с ip-адреса

Запретить с IP-адреса

Приказать разрешить,запретить или Приказать запретить,разрешить директивы объединяют базовые директивы Разрешить и Запретить в более сложную настройку конфигурации.

Однако результат немного отличается от того, что ожидало большинство людей — и я тоже вначале.

Директива Order, используемая в директивах Order Allow, Deny или Order Deny, Allow , непроста для понимания и имеет две функции:

  • Директива Order устанавливает состояние доступа по умолчанию, что означает, что она управляет порядком, в котором обрабатываются директивы Allow и Deny, И

  • Настраивает, как директивы Allow и Deny взаимодействуют друг с другом, другими словами, устанавливает политику по умолчанию для подключений, которые не соответствуют ни одному из правил Allow или Deny.

Приказ разрешить, запретить имеет только две доступные опции, которые обсуждаются далее.

Приказ разрешить, запретить

Приказ разрешить, запретить сообщает вашему веб-серверу, что правила Разрешить обрабатываются до правил Запретить . Если клиент не соответствует правилу Разрешить или соответствует правилу Запретить , клиенту будет отказано в доступе.

<Каталог «/somePath»>
Порядок Разрешить, Запретить
Запретить всем
Разрешить всем

В этом случае вашему клиенту будет отказано в доступе. Почему? Поскольку Apache сначала оценивает правила директивы Разрешить , а затем правила директивы Запретить , то сначала будет выполняться Разрешить из всех , а затем Запретить из всех .

 

Запретить, разрешить

Запретить, разрешить  означает, что правила запрета обрабатываются до правил разрешения. Если клиент не соответствует правилу отказа или соответствует правилу разрешения, ему будет предоставлен доступ.

<Каталог «/someOtherPath»>
Запретить, Разрешить
Запретить от всех
Разрешить от всех

Приведенная выше конфигурация приведет к тому, что вашему клиенту будет разрешен доступ, поскольку Запретить от всех 9011 4 правило будет обработано первым, а правило Разрешить все будет обработано вторым.