Apache 基本身份验证 - 某些文件不需要身份验证

Apache 基本身份验证 - 某些文件不需要身份验证

我正在尝试允许未经身份验证访问 Nagios 安装中的某些脚本。尽管问题并不专门针对 Nagios 或下面也说明的 CGI 处理。

本质上,我想要对特定目录中的任何内容进行身份验证:

http://example.com/nagios/cgi-bin/....

除了2条特定路径外:

http://example.com/nagios/cgi-bin/avail.cgi....
http://example.com/nagios/cgi-bin/trends.cgi....

目前我已经将 Apache 设置为要求所有访问都进行身份验证http://example.com/nagios/cgi-bin

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin

<Directory "/usr/local/nagios/sbin">
  Options ExecCGI
  AllowOverride None
  Order allow,deny
  Allow from all
  AuthName "Nagios Access"
  AuthType Basic
  AuthUserFile /usr/local/nagios/etc/htpasswd.users
  Require valid-user
</Directory>

我不想在不同的目录中复制脚本,因为这是打包软件,而且我想尽量减少支持工作量 - 我不确定包中的哪些 URL 使用规范路径。

编辑:

我可以使用 FilesMatch 代替 Direcory 块吗?如果可以,Apache 正则表达式是基于 PCRE 还是 POSIX 的?

编辑3:

使用

<FilesMatch "/(cgi-bin\/)(?!trends.cgi)(?!avail.cgi)/"> 

删除目录中所有 URL 的身份验证 :(

我还尝试在不同的目录中复制 avail.cgi 和 trends.cgi 脚本。这似乎有效 - 但表单中没有填充任何来自我的 Nagios 配置的数据!似乎 Nagios 代码中内置了额外的身份验证层。这也会破坏“要求任何/允许来自 ip”的方法。:(

虽然修改后的行为微软企业信息安全实验室可能正确rfc2396 文档它让我头痛欲裂!

答案1

您是否尝试创建一个带有指向“打开” cgi 的符号链接的新文件夹?

答案2

如果服务器上有第二个可用的 IP 地址,您可以尝试在此 IP 地址上运行反向代理,该代理仅转发这两个位置并执行 HTTP 身份验证。

<VirtualHost secondIP:80>
    ProxyPassMatch ^\/nagios\/cgi-bin\/(trends|avail)\.cgi$ "http://127.0.0.1/nagios/cgi-bin/"
    ProxyPassReverse /nagios/cgi-bin/ "http://127.0.0.1/nagios/cgi-bin/"
</VirtualHost>

ProxyPassReverseMatch由于apache 中没有指令,我还没有尝试过这是否正常工作。

答案3

使用满足:

Require valid-user
Order allow,deny
Allow from IP
Satisfy Any 

http://httpd.apache.org/docs/current/mod/core.html#satisfy

答案4

以下配置对我来说可以要求对单个 CGI 脚本进行身份验证:

<Directory "/var/www/cgi-bin">
  <Files "my-cgi-script">
    # ...
    # AuthName, AuthType, AuthUserFile, Require
    # ...
  </Files>
</Directory>

尝试将 FilesMatch 嵌套到 Directory 中并在 FilesPath 指令中使用相对路径。

相关内容