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

如何以个人用户身份运行PHP,特别是包括文件访问权限,php,security,file-permissions,Php,Security,File Permissions,应用程序按用户生成数据。每个用户都具有唯一的用户id和关联的唯一文件权限。用户文件存储在各个目录中,每个目录上都有相关的用户权限 这些要求是通过门户(假设是PHP)为单个用户提供仅对用户文件的安全访问。正在考虑的设计是模仿门户环境中的目录结构和权限。如果可以以用户身份运行PHP,则可以使用系统权限访问安全性。(这将把安全实现的范围限制在登录过程而不是应用程序。) 问题:是否可以以用户身份运行PHP并假定用户文件权限 研究发现了一些类似的问题,但不是作为单个用户运行PHP的直接问题 有几种解决方案

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

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

问题:是否可以以用户身份运行PHP并假定用户文件权限


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

有几种解决方案,从最好的到最坏的:

  • 使用类似于FPM的方法来配置单独的进程池,这些进程池配置为作为每个用户运行。
    • 只有在用户数量较少且固定的情况下才是最佳选择,否则将成为配置/管理的噩梦
    • 基本上是共享主机
  • 停止完全依赖操作系统级别的用户和权限强制,并将其构建到您的应用程序中
  • 在PHP中创建自己的权限强制抽象层。
    • 基本上是#2,但没有第一部分,这实际上使它更复杂
  • 使用和更改正在运行的进程的有效UID和GID
  • “等等!”我听到你说,“最后一个选择似乎正是我需要的!为什么是最糟糕的?”

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

    以root用户身份运行PHP,即使只是为了切换到不同的UID/GID,也是一个巨大的安全漏洞。即使是最微小的错误或缺陷现在也已经结束了,如果您正在编写一个文件管理器,这一点就更加正确了

    “那很好,”你反驳道,“这只供可信用户内部使用,所以我不担心安全性。”

    不,很糟糕。[用卷起的报纸扑向你]

    从来没有。信任。用户

    充其量,他们不会故意破坏或破坏你的应用程序,但:

  • 这种观点充其量也就是奈夫
  • 宇宙在不断地制造新的创新形式的白痴
  • 聪明、善意的白痴喜欢寻找“变通办法”,这样他们就不必打扰你了
  • 受损的客户端计算机是一种威胁
  • 假设您的内部网络没有被破坏,也永远不会被破坏,这是一个错误。[见第4页]
  • 安全审计员会把你钉死的
  • 这一清单还在继续


    TL;DR:除非您正在设置每用户虚拟主机/站点/应用程序。将文件存储在docroot之外,并使用选项#2通过PHP进行访问。如果有人发现你以root用户身份运行PHP,你的日子会很不好过。

    有几种解决方案,从最好的到最坏的:

  • 使用类似于FPM的方法来配置单独的进程池,这些进程池配置为作为每个用户运行。
    • 只有在用户数量较少且固定的情况下才是最佳选择,否则将成为配置/管理的噩梦
    • 基本上是共享主机
  • 停止完全依赖操作系统级别的用户和权限强制,并将其构建到您的应用程序中
  • 在PHP中创建自己的权限强制抽象层。
    • 基本上是#2,但没有第一部分,这实际上使它更复杂
  • 使用和更改正在运行的进程的有效UID和GID
  • “等等!”我听到你说,“最后一个选择似乎正是我需要的!为什么是最糟糕的?”

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

    以root用户身份运行PHP,即使只是为了切换到不同的UID/GID,也是一个巨大的安全漏洞。即使是最微小的错误或缺陷现在也已经结束了,如果您正在编写一个文件管理器,这一点就更加正确了

    “那很好,”你反驳道,“这只供可信用户内部使用,所以我不担心安全性。”

    不,很糟糕。[用卷起的报纸扑向你]

    从来没有。信任。用户

    充其量,他们不会故意破坏或破坏你的应用程序,但:

  • 这种观点充其量也就是奈夫
  • 宇宙在不断地制造新的创新形式的白痴
  • 聪明、善意的白痴喜欢寻找“变通办法”,这样他们就不必打扰你了
  • 受损的客户端计算机是一种威胁
  • 假设您的内部网络没有被破坏,也永远不会被破坏,这是一个错误。[见第4页]
  • 安全审计员会把你钉死的
  • 这一清单还在继续


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

    最终应用程序将不得不访问所有用户的文件,对吗?应用程序必须运行以接收请求,并且只有基于请求才能知道它应该是什么用户。所以这里有一个基本的不匹配。虽然你可以通过大量的向后弯曲来拼凑一些东西,但这远远不是一种自然的适应。你可以尝试,但我同意你将面临一场艰苦的战斗。最终应用程序将必须访问所有用户的文件,对吗?应用程序必须运行以接收请求,并且只有基于请求才能知道它应该是什么用户。所以这里有一个基本的不匹配。虽然你可以用鹅卵石