这就是我需要做的事情 - :
背景
我在服务器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上)。
答案 0 :(得分:0)
(这篇文章的第2版在第一次阅读时错过了Require user
点 - 对不起)。
我的直接和我的第二直觉是,动态.htaccess
文件(特别是设计为从单独的Web服务编写)是一种等待以安全术语发生的灾难,而您的托管服务提供商是正确的,所以你应该把它当作约束。
然而,在应用程序UID(或GID,如果模式664)重写.htaccess
文件中,没有什么可以阻止服务器A上的进程。为什么不向A添加一个脚本,它将为“htaccess”更新请求提供服务。这可以接受更新的Require user
数据集作为(JSON封装,比如说)参数,以及一些表单共享秘密签名。此脚本可以包含任何必要的验证,并在本地更新htaccess
文件。然后,服务器B可以构建列表并通过Web请求启动此传输。
我的第一个评论是,我很惊讶您的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,我想到了不同的方法。
我这样做了:
那天晚上我的HSP扫过服务器并将我的目录从world writable改为 - 但没什么大不了的......我的.htaccess文件由“nobody”拥有,我可以自动更新Require user指令。
感谢大家的帮助。