【问题标题】:PHP: get_current_user() vs. exec('whoami')PHP:get_current_user() 与 exec('whoami')
【发布时间】:2015-04-17 09:29:57
【问题描述】:

问题的简短版本:

两者有什么区别 get_current_user();exec('whoami'); ?

问题的长版本:

  1. 我在 Mac 上的 XAMPP 本地主机上。
  2. 我正在使用 Apache,构建一个 PHP 基于网站的文件夹(我们称之为 folderxyz) htdocs 文件夹(在某些 Linux+Apache 版本中为 var/www)。
  3. 我在玩数据库连接, 测试此处描述的 PDO::ERRMODE_EXCEPTION:Link

我得到了这个错误:

file_put_contents(PDOErrors.txt):打开流失败:权限 拒绝...

所以我做了一些调查,似乎要解决这个问题,我需要将文件 PDOErrors.txtCHMOD 设置更改为 777。

但是,我的问题是关于其他的。 在此过程中,我意识到我并不清楚 Apache、PHP 和 MySQL 中的user 的概念。

  • PHP 手册说get_current_user() “获取当前 PHP 脚本的所有者的名称” Link
  • PHP 手册说exec('whoami') 返回“拥有正在运行的 php/httpd 进程的用户名” Link
  • 当我使用 get_current_user() 时,我会得到 firstnamelastname,这是我在 Mac 上的帐户名。
  • 当我使用exec('whoami') 时,我得到daemon

那么...

  1. firstnamelastnamedaemon是什么关系?
  2. “当前 PHP 脚本的所有者”“拥有正在运行的 php/httpd 进程的用户名”有什么关系?
  3. 谁需要写入 PDOErrors.txt 的权限?是 firstnamelastname 还是 daemon
  4. 谁需要写入 PDOErrors.txt 的权限?是 Apache 还是 PHP(或两者兼有)?
  5. 类 unix 的 root 帐户的概念是否在此处考虑在内?

编辑:我对此进行了更新,以反映我必须更改 CHMOD 设置的不是 folderxyz。我不得不更改文件 PDOErrors.txt

的设置

此处的操作:为了将来参考,我在此处针对 Linux 平台提出了一个并行问题(附带对正在发生的事情的直观解释):https://stackoverflow.com/questions/31389892/why-is-the-output-www-data-in-one-case-and-root-in-another

【问题讨论】:

  • 我想添加以供将来参考,以下 Stackoverflow 答案解释了为什么 Apache 用户在本地机器上显示为 daemon,而在公共机器上显示为 www-data(即,可由互联网上的任何人)。我查看了本地计算机中 Apache httpd.conf 文件中的设置,usergroup 设置确实设置为 daemon: stackoverflow.com/questions/26063556/…

标签: php apache unix xampp chmod


【解决方案1】:
  1. get_current_user()(应该)返回文件的所有者,在本例中为 firstnamelastname。然而,据报道,此功能在平台之间不一致。因此,我不相信它的输出。 daemon 是运行 Apache 的用户。
  2. PHP 脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行ls -la 来查找文件所属的用户和组。
  3. 无论您正在编辑脚本的哪个用户都需要能够编写它,所以很可能是firstnamelastname (+rw)。
  4. 对于文件夹本身,您应该有+rx(执行和读取)daemon 和PHP 文件+r(读取)。在我安装 XAMMP 时,他们通过将 htdocs 中的所有内容设置为公共可读来完成此操作,因此 daemon 可以读取它,但不能写入它。
  5. Mac 有一个 root 帐户,该帐户通常拥有 htdocswww 目录。它填补了传统 unix root 用户的角色。

以下是有关文件所有者/组和进程所有者的一些信息:

host:~$ ls -l /Applications/XAMPP/xamppfiles/htdocs
drwxr-xr-x 3 root admin  4096 2015-01-01 00:01 .
drwxr-xr-x 3 root admin  4096 2015-01-01 00:01 ..
-rw-r--r-- 1 firstnamelastname admin   189 2015-01-31 20:45 index.php

host:~$ ps aux | grep httpd | head -n1    
daemon          45204   0.0  0.1  2510176  10328   ??  S    Tue11AM   0:01.38 /Applications/XAMPP/xamppfiles/bin/httpd -k start -E /Applications/XAMPP/xamppfiles/logs/error_log -DSSL -DPHP

如果您想使守护程序用户可写入文件,您可以创建一个新文件夹并将其命名为组@98​​7654335@ 的所有者(这样您也可以使用它),并给它+rwx用户和组,+rx 公开:

host:~$ cd /Applications/XAMPP/xamppfiles/htdocs
host:htdocs$ mkdir some_dir
host:htdocs$ chmod 775 some_dir

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2011-10-28
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多