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

时间:2014-05-05 21:53:07

标签: php linux

鉴于apache在我的服务器上运行的用户是真实用户,并且主目录包含.history文件,是否会通过exec()运行命令导致在该文件中生成条目?

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

2 个答案:

答案 0 :(得分: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

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


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

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

输出完全相同,就像我直接在命令行上执行此操作一样

$ echo foo $(bar2 jojo) go >/dev/tty
-bash: bar2: command not found
foo go

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

这样的调用

答案 1 :(得分:0)

历史文件也称为“bash历史”,只与调用有关,这些调用是在bash内部进行的,webserver本身是在自己的环境中运行的,每个系统调用这个进程(只不过是这个) ,与bash没什么关系;)