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 и
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 отвергается по умолчанию.
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, всем другим хостам из других подсетей доступ запрещён, т.к. для сервера состояние по умолчанию
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 директивы
Оригинал
Какие-то моменты могут быть непонятны после первого прочтения, однако, их тщательный разбор, шаг за шагом, не оставит у изучающего сомнений. Всё логически верно.
Теги:- 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 all2.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 all2.4 configuration:
Require all grantedIn 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.org2.4 configuration:
Require host example.orgIn 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-user2.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-user2.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
- конфигурация
Должно сработать. Я только что проверил ваш код на своем сервере, чтобы убедиться, что я не сошел с ума. Вы уверены, что у вас нет определения перед этим, которое имеет приоритет?
Создайте тестовый файл в папке на вашем сервере. Что-то вроде test.txt. Вы можете обнаружить, что не видите его при загрузке этого URL-адреса в браузере. Если это так, то ваше определение выше пропускается.
3Для того, что вы хотите сделать, то есть разрешить только 127.0.0.1, вы должны сделать следующее:
Заказать Разрешить, Запретить Разрешить с 127.0.0.1
Сначала разрешает
вещей, затем запрещает
вещей, а запрещает
вещей, которые не соответствуют друг другу.
Также не следует размещать блок
внутри блока
, но перед ним.
Это система Plesk? Иногда приходится смотреть, как компилируются различные http-включения. У вас может быть что-то в более позднем включаемом файле, который перезаписывает ваш первый оператор.
Спасибо. этот код работает.
NameVirtualHost 127.0.0.1
NameVirtualHost 192.168.44.141
10.0.1 192.168.44.141> #имя_сервера localhost.com Имя сервера www.localhost.com DocumentRoot "E:/abcd" <Каталог "E:/abcd/files"> Индексы опционов FollowSymLinks AllowOverride нет Порядок разрешить, запретить Разрешить с 192.168.44.128 Запретить от всех Каталог> виртуальный хост>
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью 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 правило будет обработано первым, а правило Разрешить все будет обработано вторым.