如果我正确理解您的问题,那么您的问题始于 linux 权限/用户框架的结构。因此,拥有 Apache 进程的用户是在运行脚本时创建目录和文件的用户。
如果您需要脚本的用户分离,例如:您的服务器上有不同(虚拟)主机的不同目录,并且您不希望一个主机的脚本作用于同一(apache)服务器上不同主机的数据,那么你应该使用'mpm_itk_module' 而不是更常见的'mpm-prefork' apache。
使用它,您可以定义 apache 在执行任何脚本时使用的用户/组,例如,仅通过此命令为 httpd.conf 中的每个虚拟主机条目创建目录:
<IfModule mpm_itk_module>
AssignUserId USER GROUP
</IfModule>
如果您真的想从 ONE 脚本执行创建不同的目录,则需要 root.root 拥有 apache 进程,然后脚本需要按照您想要的方式为每个目录设置权限和所有者。
但是,在网络服务器上以 root 身份运行即使是最好的脚本也不是一个好主意,因为您可能没有想到任何风险。
在我看来,虚拟主机的用户/权利分离似乎是一种更省钱的方式。
另一点 - 仅限 PHP - 是 suPHP -> http://www.suphp.org
编辑:
好的,我查看了您的网站,即使我不会说西班牙语,看起来您只有一个网站,代表不同的用户始终通过该网页访问。那么 linux 文件系统权限的用户分离需要在哪里呢?您可以通过应用程序限制所有内容,而无需文件系统用户。即使您给予例如额外的 ftp 访问权限 - 例如使用 proftpd 限制它,它也有自己的 chroot mech 供不同用户使用。
只有当您无法控制谁在执行什么时,您才应该关心文件系统权限。这是多域主机上的一个常见问题,您可以使用我提到的 mpm_itk_module 来解决。
也许你应该多描述一下你的情况?
编辑2:
正如评论中所建议的那样,如果您只使用 apache 来让用户访问文件以进行上传/操作,那么只需将文件放在(!)apache 的 documentroot 树之外并创建简单的数据库来知道哪个文件属于哪个文件用户:
user a | file parentdir/filename
这可能是一个简单的表格,您的 php 代码会从数据库中向用户提供他能够查看/操作的文件的列表,并且您的代码会按照用户操作的预期工作。
只要您不让用户通过其他服务(ftp、ssh 等)访问文件,就根本不需要使用 linux 用户权限。只需注意将文件放在服务器的文档根目录之外,这样只有您的 php 代码才能通过服务器的 apache 用户的权限访问这些文件。
编辑 3:
哈哈,在我阅读了您的类似帖子后,现在终于解决了您的问题:(Apache 用户在有权限的情况下如何写入文件?)在这种情况下(您的网页上有真正的匿名用户)您没有机会完全解决这个问题。每个访问者都被视为同一个访问者,无需身份验证。正如我在上次编辑中假设并在类似帖子中评论的那样:根本不需要处理 linux 文件权限。
您的解决方案 ;) :您需要在用户访问您的页面时使用会话 ID 在一个会话中进行文件操作。因此,您的代码需要处理访问者(会话 ID)与他使用此会话 ID 上传的文件之间的关系。使用只要访问者在线就有效的会话 ID 是执行此操作的最佳方式。再一次 - 不需要文件系统权限.... ;)
第二种方法是使用之前建议的经过身份验证的用户:创建一个带有用户/密码的数据库表以登录网页(而不是服务器)和另一个保存用户/文件关系的表。然后,在他登录网页后,再次使用会话以允许用户访问/操作已上传的文件。