如何检查用户php运行的是什么?

我需要检测如果php运行没有人。 我如何做到这一点?

还有没有其他的“没有人”的名字? “阿帕奇”? 其他人?

如果可用,则可以使用posix_geteuid探测当前用户帐户,然后使用posix_geteuid获取用户名。

但是,如果你正在以安全模式运行(这在exec被禁用的情况下通常是这样的话),那么你的PHP进程不可能在默认的www-data或者apache账户下运行。

<?php echo exec('whoami'); ?>

一种倒退的方式,但没有exec / system:

 file_put_contents("testFile", "test"); $user = fileowner("testFile"); unlink("testFile"); 

如果你创build一个文件,所有者将是PHP用户。

这也可能会使用tempnam()这样的临时文件函数来运行, tempnam()会在临时目录中创build一个随机文件并返回该文件的名称。 如果由于权限, open_basedir或安全模式等问题而导致无法写入文件,则通常会允许临时目录。

更多的细节将是有用的,但假设它是一个Linux系统,并假设PHP运行在Apache下,它将运行,如同以前的用户Apache运行。

一个简单的方法来检查(再次假设一些类似unix的环境)是创build一个php文件:

 <?php print shell_exec( 'whoami' ); ?> 

这会给你的用户。

对于我的AWS实例,当我运行这个脚本时,我得到了apache输出。

你可以尝试使用反引号:

 echo `whoami`; 

我会用:

 lsof -i lsof -i | less lsof -i | grep :http 

任何这些。 你可以在你的ssh命令行中键入em,你将看到用户正在监听什么服务。

你也可以去检查这个文件:

 more /etc/apache2/envvars 

并寻找这些线:

 export APACHE_RUN_USER=user-name export APACHE_RUN_GROUP=group-name 

要筛选出envvars文件数据,可以使用grep:

  more /etc/apache2/envvars |grep APACHE_RUN_ 

exec('whoami')会这样做

 <?php exec('whoami'); ?> 

在我的设置中,我想检查当前进程是否有权限创build文件夹,子文件夹和文件,然后开始进程并提出解决scheme,如果看起来不行。 我想在各种东西上运行stat(<file>)以确保权限匹配正在运行的进程(我使用php-fpm,因此根据池的不同而不同)。
基于posix的解决scheme马里奥上面,似乎是完美的,但它似乎posix扩展是–disabled,所以我不能做到上述,因为我想比较结果与运行stat()运行在单独的whoami响应shell也没有帮助(我需要的是用户名和用户名)。

然而,我发现一个有用的提示,我可以stat(/proc/self)stat(/proc/self/attr)并查看文件的uid和gid。

希望能帮助别人

将文件info.php添加到以下目录 – 默认的http / apache目录 – 通常是/ var / www / html

具有以下内容

 <?php phpinfo(); ?> 

然后httpd / apache重启去你的默认html目录http://enter.server.here/info.php

将提供整个PHP血统!

我通常使用

 <?php echo get_current_user(); ?> 

我会很高兴,如果它帮助你

 $_SERVER["USER"] $_SERVER["USERNAME"] 

提案

有点晚了,但即使下面是一个解决方法,它解决了这个要求,因为这工作得很好:

 <? function get_sys_usr() { $unique_name = uniqid(); // not-so-unique id $native_path = "./temp/$unique_name.php"; $public_path = "http://example.com/temp/$unique_name.php"; $php_content = "<? echo get_current_user(); ?>"; $process_usr = "apache"; // fall-back if (is_readable("./temp") && is_writable("./temp")) { file_put_contents($native_path,$php_content); $process_usr = trim(file_get_contents($public_path)); unlink($native_path); } return $process_usr; } echo get_sys_usr(); // www-data ?> 

描述

上面的代码突出显示不准确,请复制并粘贴您喜欢的编辑器并查看为PHP代码,或自行保存并testing。

正如你可能知道的那样, get_current_user()返回“当前正在运行的脚本”的所有者 – 所以如果你没有将服务器上的脚本“chown”给web-server-user,那么它很可能是“nobody”开发人员用户在同一个操作系统上,它将显示该用户名。

要解决这个问题,我们用当前正在运行的进程创build一个文件。 如果你只require()这个到当前正在运行的脚本,它将返回相同的父母脚本提到; 所以,我们需要运行它作为一个单独的请求才能生效。

过程stream

为了达到这个效果,考虑运行一个包含“运行时模式”的devise模式,所以当服务器处于“开发模式或testing模式”时,只有它可以运行这个函数并将其输出保存在某个包含,或者只是纯文本或数据库,或者其中的一个。

当然你可以改变上面代码的一些细节,因为你希望使它更加dynamic化,但是逻辑如下:

  • 定义一个独特的参考来限制对其他用户的干扰
  • 定义一个用于写入临时文件的本地文件path
  • 定义一个公共的url /path来在自己的进程中运行这个文件
  • 编写输出脚本所有者名称的临时php文件
  • 通过向其发送请求来获取该脚本的输出
  • 删除文件,因为它不再需要 – 或者如果你想离开它
  • 返回请求的输出作为函数的返回值