gpt4 book ai didi

php - 区分每个apache用户并赋予权限

转载 作者:IT王子 更新时间:2023-10-29 00:26:15 25 4
gpt4 key购买 nike

在 Web 应用程序中,我想为每个 www-data 用户创建一个文件夹,并仅向该用户授予对该文件夹的写入权限。

验证后我可以:

mkdir($file->getPath().mt_rand(0,100000),0700);  

这将在路径 $file->getPath() 中创建一个具有随机名称的新目录,拥有所有者用户的所有权限。但它会将权限授予所有 www-data 用户。

如果我创建一个 chroot jail,我必须为每个用户再次复制所有文件,因为我应该创建很多 jail(一个给用户)。

我对此很着迷,但没有找到解决方案。

最佳答案

如果我理解你的问题是对的,那么你的问题始于 linux 权限/用户框架的结构。因此,拥有 Apache 进程的用户是在运行脚本时创建目录和文件的用户。

如果您需要脚本的用户分离,例如:您的服务器上的不同(虚拟)主机有不同的目录,并且您不希望一个主机的脚本作用于同一台(apache)上不同主机的数据) 服务器,那么你应该使用 'mpm_itk_module' 而不是更常见的 'mpm-prefork' apache。

使用它,您可以定义 apache 在执行任何脚本时使用的用户/组,例如仅通过此命令为 httpd.conf 中的每个虚拟主机条目创建目录:

<IfModule mpm_itk_module>
AssignUserId USER GROUP
</IfModule>

如果你真的想从一个脚本执行中创建不同的目录,你需要 apache 进程由 root.root 拥有,然后脚本需要按照你想要的方式为每个目录设置权限和所有者。

但以 root 身份在网络服务器上运行即使是最好的脚本也绝不是一个好主意,因为您可能没有想到任何风险。

在我看来,虚拟主机的用户/权限分离似乎是一种更节省的方式。

另一点 - 仅限 PHP - 是 suPHP -> http://www.suphp.org

编辑:

好的,我查看了您的网站,即使我不会说西类牙语,看起来您只有一个网站,为始终访问该网页的不同用户提供服务。那么linux文件系统权限哪里需要用户分离呢?您可以通过应用程序限制所有内容,而无需文件系统用户。即使你给例如额外的 ftp 访问 - 限制它,例如对于 proftpd,它具有针对不同用户的自己的 chroot 机制。

只有当您无法控制谁在执行什么时,您才应该关心文件系统权限。这是多域主机上的一个常见问题,您可以使用我提到的 mpm_itk_module 来解决。

也许你应该多描述一下你的情况?

编辑 2:

正如评论中所建议的,如果您只使用 apache 来让用户访问文件以进行上传/操作,那么只需将文件放在(!)apache 的 documentroot 树之外,并创建简单的数据库来了解哪个文件是由哪个用户拥有:

user a | file parentdir/filename

这可能是一个简单的表格,您的 php 代码从数据库中向用户提供了一个列表,用户可以查看/操作哪个文件,并且您的代码按照用户操作的预期进行工作。

只要您不授予用户通过其他服务(ftp、ssh 等)访问文件的权限,就根本不需要使用 linux 用户权限。只需注意将文件放在服务器的 documentroot 之外,这样只有您的 php 代码才能通过服务器的 apache 用户权限访问这些文件。

编辑 3:

哈哈,在我读了你的类似帖子后,现在终于明白你的问题了:( How can an Apache user write files when having permissions to do it? )在这种情况下(在您的网页上有真正的匿名用户)您根本没有机会解决这个问题。每个访客都被视为同一访客,无需身份验证。正如我在上次编辑中假设的那样,并在类似的帖子中评论道:根本不需要处理 linux 文件权限。

您的解决方案 ;) :当用户访问您的页面时,您需要在一个 session 中使用 session ID 进行文件操作。因此,您的代码需要处理访问者( session ID)和他使用此 session ID 上传的文件之间的关系。使用只要访问者在线就有效的 session ID 是执行此操作的最佳方法。再一次 - 不需要文件系统权限.... ;)

第二种方法是按照之前的建议使用授权用户:创建一个包含用户/密码的数据库表来登录网页(而不是服务器)和另一个保存用户/文件关系的表。然后,在他登录网页后,再次使用 session 来允许用户访问/操作已经上传的文件。

关于php - 区分每个apache用户并赋予权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com