需要一个聪明的解决方案来动态生成.htaccess文件

时间:2012-01-13 14:25:45

标签: .htaccess

这就是我需要做的事情 -

  1. 在我的.htaccess文件中包含一个驻留在服务器B上的外部文件,或
  2. 使用PHP或
  3. 解析服务器A上的.htaccess文件
  4. 甚至是一个更聪明的解决方案(由于我对httpd.conf和apache指令的经验有限,我此时无法想象)
  5. 背景

    我在服务器A上有一个.htaccess文件。我将其权限设置为-rw-rw-rw(0666)并根据服务器B上的全天事件动态构建它,以实现我的应用程序的某些目标服务器A.我发现我的托管服务提供商每晚都会扫描他们的服务器(服务器A)并删除世界可写文件文件,并将其权限更改为0664.Kudo用于保护服务器。 [请不要评论我想让我的.htaccess文件世界可写的方法 - 我真的理解其含义]

    服务器A上的.htacess文件只是为了提供Shibboleth身份验证而存在。我说明了这一点,因为动态的apache指令的唯一方面是Require user堆栈。

    是否可以在驻留在服务器A上的.htaccess文件中包含驻留在服务器B上的“用户堆栈”?

    或者我可以通过PHP引擎解析服务器A上的.htaccess文件吗?

    感谢您帮我解决这个问题。

    这是.htaccess的样子:

    AuthType shibboleth
    AuthName "Secure Login"
    ShibRequireSession on
    Header append Cache-Control "private"
    Require user bob jill steve
    

    我想要做的就是每次在我的应用程序中添加/更改/删除用户时更新文件的bob jill steve列表部分,以使我的Shibboleth所需用户(在服务器A上)同步使用我的MySQL / PHP Web应用程序(住在服务器B上)。

2 个答案:

答案 0 :(得分:0)

(这篇文章的第2版在第一次阅读时错过了Require user点 - 对不起)。

我的直接和我的第二直觉是,动态.htaccess文件(特别是设计为从单独的Web服务编写)是一种等待以安全术语发生的灾难,而您的托管服务提供商是正确的,所以你应该把它当作约束。

然而,在应用程序UID(或GID,如果模式664)重写.htaccess文件中,没有什么可以阻止服务器A上的进程。为什么不向A添加一个脚本,它将为“htaccess”更新请求提供服务。这可以接受更新的Require user数据集作为(JSON封装,比如说)参数,以及一些表单共享秘密签名。此脚本可以包含任何必要的验证,并在本地更新htaccess文件。然后,服务器B可以构建列表并通过Web请求启动此传输。

DOT博士

回复后的后记

我的第一个评论是,我很惊讶您的ISP以nobody运行您的脚本。我假设所有帐户都处理相同,因此不存在由单独帐户创建的文件的UID / GID访问控制分离 - 在共享环境中是一个很大的禁忌。通常在suEXEC / suPHP实现中,任何交互式脚本都在脚本文件的UID中运行 - 在您的情况下,我假设您的ftp帐户 - 您对myftpuser匿名的内容。我可以假设你的ISP使用mod_php5运行共享帐户,其中apache运行为nobody,这是非常不寻常的,恕我直言。

然而,我为医生运行一般信息维基也是这样设置的,而我所做的是将www-data拥有的所有应用程序可写内容放在(在我的情况下)目录中。肯定没有什么可以阻止你设置这样一个目录,里面有自己的.htaccess文件 - 全部由nobody拥有,因此可以通过脚本更新。

如果您想要这种类型脚本的简单示例,请参阅我的文章Running remote commands on a Webfusion shared service

答案 1 :(得分:0)

以下是我几天前解决问题的方法。

鉴于我的HSP每晚扫描服务器并将任何世界可写文件更改为664,我想到了不同的方法。

我这样做了:

  1. 白天我把包含我的不可写.htaccess文件的目录改为0777
  2. 然后我删除了我的.htaccess文件
  3. 然后我重新运行我的脚本 - 我的fopen()命令使用模式“w”(所以我想......如果文件现在不存在,为什么不让我的php脚本创建它全新。 )
  4. 因为我在上面某处说过我的php运行为“没人” - 瞧!我现在有一个目录
  5. 中没有人拥有的文件

    那天晚上我的HSP扫过服务器并将我的目录从world writable改为 - 但没什么大不了的......我的.htaccess文件由“nobody”拥有,我可以自动更新Require user指令。

    感谢大家的帮助。