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

问题描述 投票:0回答:1

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

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

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

研究已经确定了一些类似的问题,但不是直接以个人用户身份运行PHP的直接问题。

php security file-permissions
1个回答
0
投票

使用FPM之类的东西来配置单独的进程池,这些进程池配置为以每个用户身份运行。

  1. 仅当您的用户数量固定时才是最佳选择,否则将成为配置/管理员的噩梦。
    基本共享的托管。
  • 完全停止依赖操作系统级别的用户和权限实施,并将其构建到您的应用程序中。
  • 在PHP中创建您自己的权限实施抽象层。
  • 基本上是#2,但没有第一部分,这实际上使它变得[[more变得复杂。
    • 使用posix_seteuid()posix_seteuid()来更改正在运行的进程的有效UID和GID。
    • “但是等等!”我听到你说:“最后一个选项似乎是完全我需要的!为什么它最糟?”
    • 由于要更改进程的UID或GID,必须首先以允许执行此操作的用户身份运行该进程。该用户是root。

      [以root身份运行PHP,甚至只是为了将其移至另一个UID / GID也是短暂的,这是一个

      大规模安全漏洞

      。现在,即使是最轻微的错误或缺陷也已经结束了,如果您正在编写文件管理器,这更是

      指数式。

      “很好,”您反驳说,“这仅用于内部受信任用户一起使用,因此我不必担心安全性。”

      NO。不好。 [为您叠起卷起的报纸]

      从不。信任。用户。

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

      此视图充其量是天真的。

    • 宇宙在不断制造新的和创新的白痴形式。
        聪明,善意的白痴喜欢找到“变通办法”,这样他们就不必打扰您。
      1. 受损的客户端计算机是一种威胁。
      2. 假设您的内部网络没有受到损害,这将是一个错误。 [请参阅#4]
      3. 安全审核员将把您钉在十字架上。
    • 列表继续。
    • TL; DR:除非要设置每个用户的虚拟主机/站点/应用程序。将文件存储在docroot之外,并使用Option#2来限制通过PHP的访问。如果有人发现您以root用户身份运行PHP,那将是一段糟糕的时光。
    © www.soinside.com 2019 - 2024. All rights reserved.