如何以个人用户身份运行 PHP,特别是包括文件访问权限



应用程序按用户生成数据。每个用户都有一个唯一的用户 ID 和关联的唯一文件权限。用户文件存储在各个目录中,每个目录具有关联的用户权限。

要求是通过门户提供对用户文件的安全个人用户访问,假设 PHP。正在考虑的设计是模仿门户网站环境中的目录结构和权限。如果可以以用户身份运行 PHP,则可以使用系统权限访问安全性。(这会将安全实现的范围限制在登录过程而不是应用程序。

问:是否可以以用户身份运行 PHP 并承担用户文件权限?

研究已经发现了一些类似的问题,但不是作为个人用户运行PHP的直接问题。

有一些解决方案,从最好到最差:

  1. 使用 FPM 之类的内容来配置配置为以每个用户身份运行的单独进程池。
    • 只有当你的用户数量很少,固定数量时,才会成为配置/管理员的噩梦。
    • 基本上是共享主机。
  2. 完全停止依赖操作系统级别的用户和权限强制实施,并将其构建到您的应用中。
  3. 在 PHP 中创建您自己的权限强制抽象层。
    • 基本上是#2,但没有第一部分,这实际上使它更加复杂。
  4. 使用posix_seteuid()posix_setegid()更改正在运行的进程的有效 UID 和 GID。

"等等!"我听到你说,"最后一个选择似乎正是我所需要的!为什么是最糟糕的?

因为为了更改进程的 UID 或 GID,该进程必须首先以允许执行此类操作的用户身份运行。该用户是根用户。

以根用户身份运行PHP,即使是为了下降到不同的UID/GID,也是一个巨大的安全漏洞。即使是最小的错误或缺陷现在也结束了,如果你正在编写文件管理器,这要成倍增加

">

没关系,"你反驳道,"这只供受信任的用户内部使用,所以我不担心安全性。

不,不好。[用卷起的报纸狠狠地砸你]

从不。信任。用户。

充其量,他们永远不会故意破坏或损害您的应用程序,但是:

  1. 这种观点充其量是幼稚的。
  2. 宇宙不断制造新的和创新形式的白痴。
  3. 聪明、善意的白痴喜欢找到"解决方法",这样他们就不必打扰你。
  4. 遭到入侵的客户端计算机是一种威胁。
  5. 假设您的内部网络没有受到损害,也永远不会受到损害是一个错误。[见#4]
  6. 安全审计员会把你钉在十字架上。

这样的例子不胜枚举。

TL;DR:除非您要设置每用户虚拟主机/站点/应用程序。将文件存储在文档根之外,并使用选项 #2 通过 PHP 进行门控访问。如果有人发现你以root身份运行PHP,你会过得很糟糕。

相关内容

  • 没有找到相关文章

最新更新