【问题标题】:PHP creating file with different user and group based on location of new filePHP根据新文件的位置创建具有不同用户和组的文件
【发布时间】:2017-08-31 03:23:47
【问题描述】:

我正在尝试在我的首选文件夹的子文件夹中使用 PHP 创建一个文件。

我正在使用以下命令:

file_put_contents("/preferred_folder/subfolder/test_A.txt", "test_A");

我收到以下错误消息:

Warning: file_put_contents(preferred_folder/subfolder/test_A.txt): failed to open stream: Permission denied in /users/service/dummy_username/code.php on line ###.

我通过 PuTTY 使用以下命令检查了 /preferred_folder/subfolder/ 的权限,我以“dummy_username”身份登录,我收到以下响应:

$ ls -l /preferred_folder/
drwxrwxr-x   7 1234567 1000001   120 Apr 30 13:35 subfolder

未启用“其他用户”的写入权限,这是有意的。另一方面,我不认识这个用户或组,所以我检查了:

$ groups 1000001
groups: 1000001: No such user

此外,“getent passwds 1234567”不返回任何值(对于“dummy_username”它成功)。这就是奇怪的地方;我尝试在其他两个位置创建文件作为完整性检查:第一个具有“其他用户”的写入权限,第二个是我的脚本在过去几年中成功创建文件的位置。

file_put_contents("/preferred_folder/test_B.txt", "test_B");
file_put_contents("/users/service/dummy_username/test_C.txt", "test_C");

在这些情况下,两个文件都已成功创建,但文件的用户和组不同:

$ ls -l /preferred_folder/test_B.txt
-rw-r--r-- 1 ABCDEFG root 5 Aug 30 08:39 /preferred_folder/test_B.txt

$ ls -l /users/service/dummy_username/test_C.txt
-rw-r--r-- 1 dummy_username dummy_group 5 Aug 30 08:39 test_C.txt

我还有几个问题:

1) 为什么从这个脚本创建的文件的用户和组仅基于文件位置而不同?我希望它们都归“dummy_username”所有。

2) 用户“ABCDEFG”是什么/谁?我已经验证“root”组没有明确包含这样的用户。

3) 组“1000001”是什么/谁,为什么用户“1234567”也不知道是该组的一部分?

4) 最后,除了 chmod 777'ing 整个首选文件夹及其多个级别的子文件夹之外,是否有适当且建议的方法为我的“dummy_username”授予特定权限以创建预期的文件?

提前感谢您的帮助。长期访客;第三次海报。

【问题讨论】:

    标签: php file-permissions


    【解决方案1】:

    您获得权限被拒绝的原因是因为在 Web 服务器上运行 PHP 的用户没有写入该目录的权限。

    在许多 nginx/apache 配置中,Web 服务器设置为允许用户 www-data 访问 /var/www/html。您的 Web 应用程序的根目录。

    在此目录之外写入会导致权限错误。

    PHP 几乎没有理由访问/var/www/html 之外的目录,除非您正在编写用于终端的脚本。

    如果您在终端上运行 PHP,您可以sudo,或创建一个有权从该目录读取/写入的用户,并使用该用户运行脚本。

    【讨论】:

    • 感谢您的回复,@BugHunterUK。我想通过将此用户添加到拥有“/preferred_folder/subfolder”(即“1000001”)的组中来专门授予“dummy_username”权限。如前所述,dummy_username 可以在preferred_folder 中创建文件,尽管它具有一个奇怪的用户/组。我怎么知道哪个用户名适合添加到组 1000001 ?此外,您能否提供任何见解,说明为什么拥有 preferred_folder 中新创建文件的用户/组与 /users/service/dummy_username/ 中的不同?我在哪里可以找到和更改这些设置?谢谢!
    • 更新:我刚刚发现ACLs,它解释了如何指定文件所有权。
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2020-02-16
    • 2019-03-15
    • 2020-11-09
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多