我需要检测php是否以nobody身份运行。我该如何做?
还有其他与"nobody"类似的名称吗?比如"apache"?还有其他的吗?
我需要检测php是否以nobody身份运行。我该如何做?
还有其他与"nobody"类似的名称吗?比如"apache"?还有其他的吗?
<?php echo exec('whoami'); ?>
如果可用,你可以使用posix_geteuid
探测当前用户账户,然后再使用posix_getpwuid
获取用户名。
$username = posix_getpwuid(posix_geteuid())['name'];
然而,如果您正在安全模式下运行(通常在禁用exec时),则您的PHP进程很可能仅在默认的www-data
或apache
帐户下运行。
get_current_user()
手册页面上有一条评论展示了这种方法。从PHP 5.4开始,可以缩短为这样:print posix_getpwuid(posix_geteuid())['name'];
- Palec有点儿反常,但不需要使用 exec/system:
file_put_contents("testFile", "test");
$user = fileowner("testFile");
unlink("testFile");
如果你创建一个文件,该文件的所有者将会是PHP用户。
这也可以使用任何临时文件函数运行,例如tempnam()
,它在临时目录中创建一个随机文件并返回该文件的名称。如果由于权限、open_basedir
或安全模式等原因无法写入文件,则通常仍允许写入临时目录。
$temp_file = tempnam(sys_get_temp_dir(), 'TMP');
会在大多数系统的临时目录中创建一个临时文件。然后,您可以使用该文件来获取用户/组。我留给用户自己去研究一些内容。 - Jonathan Kuhn提供更多细节会更有帮助,但是假设这是一个Linux系统,假设PHP在Apache下运行,那么它将以Apache运行的任何用户身份运行。
检查的一种简单方法(同样假设在某个类Unix环境中)是创建一个具有以下内容的PHP文件:
<?php
print shell_exec( 'whoami' );
?>
这将为您提供用户。
对于我的AWS实例,当我运行此脚本时,输出结果是apache
。
你可以直接从命令行运行:
php -r "echo exec('whoami');"
echo `whoami`;
exec('whoami')
可以实现此功能。
<?php
echo exec('whoami');
?>
我会使用:
lsof -i
lsof -i | less
lsof -i | grep :http
您可以在ssh命令行中输入任何一个命令,就能看到哪个用户正在监听每个服务。
您也可以检查这个文件:
more /etc/apache2/envvars
并查找这些行:
export APACHE_RUN_USER=user-name
export APACHE_RUN_GROUP=group-name
你可以使用grep来过滤掉环境变量文件的数据:
more /etc/apache2/envvars | grep APACHE_RUN_
grep "APACHE_RUN_" /etc/apache2/envvars
运行良好,谢谢。 - Tarik<?php
phpinfo();
?>
然后重启httpd/apache 前往您的默认HTML目录 http://enter.server.here/info.php
将提供整个PHP家谱!
您可以使用以下命令:
<? system('whoami');?>
或者
<? passthru('whoami');?>
或者
<? print exec('whoami');?>
或者
<? print shell_exec('whoami');?>
请注意,get_current_user()
返回当前 PHP 脚本所有者的名称!