接着上回的话题,关于一个系统管理员能够给一台跑着多个应用的服务器做些什么来提高整体安全性。除了限制一些危险函数以外,很重要的便是尽可能地隔离不同的应用,以免一个瘫痪/被攻影响所有。其实,限制危险函数也是为了更好地实现应用隔离——接下来我们会看到,对于某些应用隔离方法,限制某些函数的调用是必须的。这里,我会大致按照隔离的效果降序给出几种常用方法。需要注意到的是,一般来说隔离效果越好,对性能的损失和其他副作用也越大。

一、虚拟化

虚拟化几乎可以算是在一台物理机上能做到的最彻底的应用隔离手段了。虚拟化的形式多种多样,从全虚拟、半虚拟,到一些轻量化的使用 cgroup 等实现的“容器”,不一而足,不是这篇文章能够囊括的。就算是最轻量级的虚拟化,在数据安全意味上的隔离性也是非常强的,只要实现正确,几乎不可能相互影响数据,唯一有可能的就是在性能上造成些许干扰。同时,即使是最轻量的虚拟化配置起来也有些麻烦,绝大多数实现都需要安装多套运行时,在存储上造成不少 overhead 不说,配置、维护起来也可能增添一些麻烦,而最大的问题可能就是性能损失了——如果你只有一台入门级服务器,在上面做虚拟化绝对不是一个好选择。

二、chroot 后的多 Apache 实例

这个似乎不是一个很常见的方法,但在理论上是可行的。首先, Apache 经过大量的调校之后是可以 chroot 运行的。这样一来,我们给每个应用配备一套独立的根目录,运行多个 chroot 后的 Apache 实例(整个实例,不单单是 worker ),注意各个实例监听端口不能重复,再在前面放一个统一的 nginx 转发。就可以实现非常理想的数据隔离。通过适当设置各个示例的 worker 数量,还能最大程度保证低效应用不会卡住其他应用。

三、以 CGI 模式运行 PHP (包括 suphp )

这是一个十分巧妙地可以低 overhead 运行多个不同身份的 PHP 。有两种实现方法,一种就是直接使用 fastcgi 或者 php-fpm ,给每个应用分别运行一套,并且正确地指定 run user/group ;另一种则是使用 Apache 插件—— suPHP ,它本身虽然是一个插件,但事实上是做了一层中转,在接到 PHP request 后根据配置文件以适当的用户启动(事实上是通过 setuid 来实现的) php-cgi 来处理请求。

我在一台测试服务器上使用的就是 suphp ,然而这个项目已经很久没有维护了,使用普通的 php-cgi 性能也很差。如果需要在生成环境使用的话,推荐还是通过自己写脚本调用 php-fpm (较新的 PHP 都自带)来实现。但不管用何种方式, CGI 模式的 PHP 都不如 Apache mod 模式快(网络上有很多谣传,声称 php-fpm 甚至比 mod_php 还快),并且会占用大量内存。另外 CGI 模式还会带来一些微妙的配置问题,一些细微处的表现也会不同,需要稍微留意。

四、使用 open_basedir 设置

这个是隔离效果最差,但也是对性能几乎没有影响的方法了。通过在每个 Directory 中设置相应的 open_basedir ,就可以限制此目录下的脚本仅能访问相应的目录。记得要加上 /tmp ,不过不需要显式地加上 session 存储目录(一般是在 /var/lib/php… ),后者 PHP 会自动处理好的。最后,一定要记得使用上一篇文章中提到的函数限制,否则很有可能被绕过。

最后

不管用何种方式,正确地配置文件和目录的权限都是非常重要的!甚至可以说是一切的基础!不过服务器(尤其是多应用服务器)上的权限管理又是另一个值得单独一说的话题了。

php目录隔离,PHP 应用隔离的几种方法相关推荐

  1. linux shell 执行目录,bash shell脚本执行的几种方法

    bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考. 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一: ...

  2. vue3vite工程里面引入assets目录下的图片文件(一种方法)

    <template><div><p>轮播图</p><van-swipe class="my-swipe" :autoplay= ...

  3. 手机沙盒隔离软件_360隔离沙箱下载_360隔离沙箱独立版下载 v3.0.0 官方版_天天下载手机版...

    360隔离沙箱独立版是一款360安全卫士分离出来系统防护工具.360隔离沙箱独立版能帮助用户为自己电脑建立病毒隔离环境,在环境中运行程序就不用受到病毒侵袭,让用户办公娱乐更放心. 360隔离沙箱独立版 ...

  4. 关于以太网光纤收发器,逻辑隔离与物理隔离的理解与区别

    现如今,随着以太网的广泛应用,在很多领域,比如说电力.银行.公安.部队.铁路.大型企事业单位专网有广泛物理隔离的以太网接入需求,但是什么是物理隔离以太网呢?什么又是逻辑隔离以太网呢?我们该如何判断逻辑 ...

  5. DIN14 IPO系列 一路输入四路输出 模拟信号隔离分配器 光耦隔离

    主要特性: >>精度等级:0.1级.0.2级.产品出厂前已检验校正,用户可以直接使用 >>辅助电源:5V/12V/15V/24VDC(范围±10%) >>国际标准一 ...

  6. USB实现隔离的四种方法分析-方法四最好: 数字隔离器 USB隔离芯片ADuM3160、ADuM4160

    USB实现隔离的四种方法分析 目前在办公室和家庭中使用的标准信息处理设备-个人电脑 (PC),使用通用串行总线(U S B) 与大多数外设进行通讯.标准化.低成本 及软件和开发工具的支持已使个人电脑成 ...

  7. 信号隔离、电源隔离介绍

    修改时间:20221027 隔离 防止电击,保护处理器.AC或 FPGA 免受高压损坏风险,中断接地回路和通信网络: 隔离原因 确保安全. 解决接地电位差 提高电路抗噪能力. 两种隔离方法: 模拟.数 ...

  8. 什么是物理隔离?物理隔离光端机是什么?

    什么是物理隔离? 物理隔离,是指采用物理方法将内网与外网隔离从而避免入侵或信息泄露的风险的技术手段.物理隔离主要用来解决网络安全问题的,尤其是在那些需要绝对保证安全的保密网,专网和特种网络与互联网进行 ...

  9. windows目录内打开CMD的几种方法

    ​在工作中常常会有需要在某个文件夹内使用cmd的情况,例如运行某脚本,下面演示几种方法. 以进入以下目录操作为例: "姿势"一 : 常用的cd命令 cd命令是我们平常使用比较多的方 ...

  10. latex自动生成中文目录_自动生成工作表目录三种方法,看哪种适合你?

    如果在一个工作簿内有很多工作表需要去维护管理,一个个的查找显然是很麻烦的,建立一个工作表的导航目录无疑是最便捷的方法. 下面介绍三种生成工作表目录的方法: 一.利用宏表函数生成可导航目录 第1步:定义 ...

最新文章

  1. 产生螺旋分类样本集合 SpiralData
  2. Divide Two Integers
  3. 模拟video播放器
  4. cisco 路由器访问权限的设置
  5. poj 1208 Web Navigation(堆栈操作)
  6. codeforces 1038a(找最长的前k个字母出现相同次数的字符串)水题
  7. 对于“知识”,我们存在哪些误解?
  8. php 收缩栏,HTML5每日一练之details展开收缩标签的应用
  9. 【英语学习】【WOTD】prestigious 释义/词源/示例
  10. 【5分钟 Paper】(TD3) Addressing Function Approximation Error in Actor-Critic Methods
  11. 微信话术自动回复机器人软件
  12. 1《游戏脚本高级编程》之命令脚本的随想
  13. Eclipse, jsp代码修改之后,页面却没有变化!解决思路
  14. Axure RP 8.0 软件安装教程
  15. 真格量化常见报错信息和Debug方法
  16. bzoj 5394: [Ynoi2016]炸脖龙 扩展欧拉定理+树状数组
  17. Task2 数据分析 (1)
  18. 简智音科技:出色的抖音短视频需要以下几款辅助软件!
  19. QTableView中添加icon
  20. 正版现货黄金怎么区分(上)

热门文章

  1. ​最高要价 8888元,小米 11 邀请函现身闲鱼;荣耀与微软签署全球 PC 合作协议;Xfce 4.16 发布|极客头条...
  2. 赋能金融全链路,360金融的融合中台究竟有何不同?
  3. Wi-Fi 6这么“6” 原来靠的是这些黑科技!
  4. 教你一招用 Python Turtle 库画出“精美碎花小清新风格树”,速取代码! | 原力计划...
  5. 漫画:什么是 “模因” ?
  6. 漫画面向对象编程,用漫画给你讲技术!
  7. 群聊太多?三步教你用 Python 自动监听转发群消息
  8. 十年无果,Linux 开发者放弃 VMware 诉讼
  9. 学 Python 没找对路到底有多惨?| 码书
  10. 马化腾谈滴滴;苹果供应商研发柔性玻璃;丁磊谈沉迷手机 | 极客头条