PHP:get_current_user() 与 exec('whoami')

Posted

技术标签:

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

问题的简短版本:

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

问题的长版本:

    我在 Mac 上的 XAMPP 本地主机上。 我正在使用 Apache,构建一个 php 基于网站的文件夹(我们称之为 folderxyz) htdocs 文件夹(在某些 Linux+Apache 版本中为 var/www)。 我在玩数据库连接, 测试此处描述的 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

那么...

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

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

的设置

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

【问题讨论】:

我想添加以供将来参考,以下 *** 答案解释了为什么 Apache 用户在本地机器上显示为 daemon,而在公共机器上显示为 www-data(即,可由互联网上的任何人)。我查看了本地计算机中 Apache httpd.conf 文件中的设置,usergroup 设置确实设置为 daemon: ***.com/questions/26063556/… 【参考方案1】:
    get_current_user()(应该)返回文件的所有者,在本例中为 firstnamelastname。然而,据报道,此功能在平台之间不一致。因此,我不相信它的输出。 daemon 是运行 Apache 的用户。 PHP 脚本的所有者是根据操作系统拥有文件本身的用户。您可以在脚本所在的目录中运行ls -la 来查找文件所属的用户和组。 无论您正在编辑脚本的哪个用户都需要能够编写它,所以很可能是firstnamelastname (+rw)。 对于文件夹本身,您应该有+rx(执行和读取)daemon 和PHP 文件+r(读取)。在我安装 XAMMP 时,他们通过将 htdocs 中的所有内容设置为公共可读来完成此操作,因此 daemon 可以读取它,但不能写入它。 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

【讨论】:

以上是关于PHP:get_current_user() 与 exec('whoami')的主要内容,如果未能解决你的问题,请参考以下文章

PHP 和 Linux IPC 套接字(和 Dropbox)

php删除目录及目录下的内容

关于当前PHP脚本运行时系统信息相关函数

tornado用户验证

安全知识

从 BlobstoreUploadHandler 获取当前用户