如何阻止 mkdir() 文件将“守护进程”设置为管理员

Posted

技术标签:

【中文标题】如何阻止 mkdir() 文件将“守护进程”设置为管理员【英文标题】:How to stop mkdir() files from setting "daemon" as admin 【发布时间】:2021-06-25 14:01:52 【问题描述】:

我正在使用 mkdir() 在我的代码中创建新文件,但由于某种原因,它设置了一个名为“守护进程”的东西作为管理员。我无法删除、编辑、访问甚至移动这些文件。在我的代码中创建文件时如何改变这种情况?

<?php
 $dir = 'myDir3';

 // owner will be the user/group the PHP script is run under
 if ( !file_exists($dir) ) 
     mkdir ($dir, 0777);
 

 file_put_contents ($dir.'/test.txt', 'Hello File');


$file = 'template.php';

if(file_exists($file))

    echo readfile($file);


    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    ini_set("display_errors", 1);

    copy($file, $dir.'/fake.php');



    

 else 

    echo 'file does not exist';







?>

【问题讨论】:

【参考方案1】:

尤里卡编辑(1):

好的,再次感谢 @blueweimer 澄清您在 MacOS(而不是 XAMPP-vm)上使用 XAMPP;因为多亏了这一澄清,我才能找到您问题的正确答案,可以在 here 找到。

详细说明链接中的答案: 默认情况下,在 MacOS 中的 XAMPP 中创建任何类型的文件夹或文件时,它使用在 httpd.conf 文件中找到的用户和组(d 代表“守护进程”,这是 Unix 系统中运行进程的名称(如Linux 和 Mac,Mac 与 Unix 的区别更大,但仍然保留了一些相同的术语))。因此,通过更改此文件中的用户和组,您可以更改保持服务器运行的用户。它是 Apache 用来访问 XAMPP 中的所有内容的用户。

请务必注意,在更改 httpd.conf 中的文件时,您正在更改访问用户;但这不会自动更改已创建的文件和文件夹的所有者。根据上面的链接,这些文件位于/Applications/XAMPP/xamppfiles/,您必须将文件的所有者和文件夹本身更改为您在 httpd.conf 中更改为的新用户。

请勿将此用户更改为您自己的用户,因为 XAMPP 上可能发生的任何安全故障都将允许任何有权访问您的 XAMPP 服务器的人远程访问您的用户。

编辑前:

首先,如果可能,请发布一个代码 sn-p,以便我们知道它是如何被访问的。

其次,我很抱歉将所有这些都放在答案中(声誉低,所以我还不能发表评论),但从mkdir manual page for php 来看,它似乎与用户一起创建了目录谁以所有者的身份运行它。鉴于它将所有者设置为“守护程序”并且您无法访问它,我相信可以安全地假设您没有建立默认权限 (0777) 并将文件作为守护程序运行。

您可以选择更改创建文件夹的权限:

<?php
mkdir("/path/to/my/dir", 0777);
?>

或者,您可以使用chown command 将所有权从“守护进程”更改为您创建文件夹时使用的同一 php 文件中的另一个用户:

<?php
mkdir("/path/to/my/dir", 0700);
chown("/path/to/my/dir", "username");
?>

这个答案是根据提供的信息给出的:你没有指定你正在使用哪个网络服务器(你只是指定了 html),并且你没有指定操作系统,所以我的理解是它是一个 Linux分发(否则文件夹访问不是 PHP 的问题,而是网络服务器的权限问题)。

【讨论】:

我正在使用我的 Mac 来执行此操作,并且正在 Visual Studio 代码上运行它。提交此回复后,我将确保使用代码 sn-p 编辑我的问题。我已将权限更改为 0777 无济于事。昨天大部分时间我都在使用 Apple Care,试图弄清楚这是否是 Apple 的问题,但在卸载并重新安装 MAC OS 后,他们告诉我这不是我正在使用的 Mac 的问题。我使用 Xampp 连接到本地主机,我不确定这是否能澄清任何事情。 我可以确认使用 chown() 不起作用。我刚刚在我的代码中尝试过,它仍然显示管理员是守护进程。 好的,所以如果您使用的是 XAMPP,那么您使用的是 apache。稍后我会回复您,因为自从我处理 Apache 以来已经有一段时间了,它在访问和写入文件时需要自己的小权限。编辑:哇,一旦您指定了 XAMPP,我就发现了另一个 *** 案例,该案例似乎处理了与您面临的问题类似的问题 - ***.com/questions/9046977/… - XAMPP 正在使用的文件夹具有 XAMPP 独有的权限,这些文件夹是在此文件夹中创建并继承它的权限。我会继续寻找 抱歉回复晚了,感谢您提供的信息。我很难弄清楚如何做到这一点。我在终端这样做吗?我应该采取哪些步骤来改变这种情况? 恐怕我会因为迟到的反应而超过你,所以没有必要道歉。话虽如此,您可以以图形方式或在终端中执行此操作。由于通过文本解释 GUI 导航可能有点困难(并且有字符限制),因此我将提供此链接以通过 GUI 更改文件夹权限 (support.apple.com/guide/mac-help/…)。至于通过终端执行此操作,只需前往父目录,然后通过 sudo 命令运行“chown -R”即可。我的字符用完了。

以上是关于如何阻止 mkdir() 文件将“守护进程”设置为管理员的主要内容,如果未能解决你的问题,请参考以下文章

linux 如何将守护进程的日志写到自己指定的日志文件

Mac OSX 上的 XAMPP:为啥作为“守护进程”运行? [关闭]

在 Laravel/Lumen 中动态创建的工作守护进程队列

如何创建守护进程?

设置zookeeper为systemctl守护进程

如何通过命名管道传输文件描述符