PHP的exec()函数和.history文件

Bad*_*olf 4 php linux

假设apache在我的服务器上运行的用户是真实用户并且具有带有.history文件的主目录,那么将通过exec()原因条目在该文件中运行命令吗?

例如,如果我运行exec("whoami")并以该用户身份登录并运行该命令,history我会在该历史记录中看到该命令的条目whoami吗?

Mic*_*ael 6

没有.

michael@MacMichi:~ $ php -r 'exec("whoami");'
michael@MacMichi:~ $ history |tail -n3
  506  history |tail -n3
  507  php -r 'exec("whoami");'
  508  history |tail -n3
Run Code Online (Sandbox Code Playgroud)

对于apache案例:我在两年前(2012年)尝试过,并且发现它对历史没有任何影响.如果你不确定的话,试试吧......


只是旁注......命令确实由shell解释,正如您可以通过这个简单示例看到的那样

$ php -r 'exec("echo foo $(bar2 jojo) go >/dev/tty");'
sh: bar2: command not found
foo go
Run Code Online (Sandbox Code Playgroud)

这与我直接在命令行上执行此操作的输出完全相同

$ echo foo $(bar2 jojo) go >/dev/tty
-bash: bar2: command not found
foo go
Run Code Online (Sandbox Code Playgroud)

这里重要的一点是,如果它处于"交互模式",那么shell只会向历史添加命令.当您执行类似cat|bash或类似操作时bash -c $exec_command,不会创建历史记录条目.那是什么exec(),顺便说一下.这是一个像C命令一样的调用execl("/bin/sh", "-c", exec_command, NULL);