我正在编写一个 PHP 脚本,该脚本将向.htaccess
文件添加 IP 地址块。我担心的是,我不想让.htaccess
Web 服务器用户打开该文件进行一般写入,因为这样对 Web 服务器的任何妥协都会允许他们向文件写入任何他们喜欢的内容.htaccess
。所以我试图找到一种方法来限制 PHP 脚本只能以某种方式编写我希望它能够编写的内容。
我认为执行此操作的适当方法可能是在另一个位置(可能由 root 拥有)创建一个已suid
在其上设置的脚本(我的 Web 分区不允许suid
)。然后,我可以从我的 PHP 脚本调用该脚本,它只能执行该中间脚本的接口对其可用的操作,即获取将特定 IP 地址阻止代码写入文件所需的.htaccess
参数,没有别的。
这听起来像是解决这个问题的最佳方法吗?有没有其他更好的方法,或者我缺少什么考虑?
元注释:我考虑过信息安全网站或 Stack Overflow 来回答这个问题。如果其中之一会更好,请告诉我。
答案1
让 PHP 脚本将 IP 地址写入数据库表。另外,cron
定期执行不同的脚本(推荐?Python)来查询值并将它们写入文件.htaccess
。然后您可以保持文件的权限.htaccess
严格,例如0640
, root:www-user
.
我们能在脚本上设置 SUID 位;但是,默认情况下,Linux 会正确地忽略它。只需将权限更改为从 运行的脚本上的类似权限0700
即可。root:root
cron
许多像这样的工作都可以使用这种技术(一种数据库队列)来处理。当Web界面是系统管理的项目需求时,我就使用过它。在此类场景中,队列可以管理用户、密码、虚拟主机、DNS——凡是你能想到的。