2014-05-05 33 views
2

鉴于apache在我的服务器上运行的用户是真实用户并且具有带有.history文件的主目录,将通过exec()运行命令会导致条目生成在那个文件中?PHP的exec()函数和.history文件

例如,如果我跑exec("whoami")和我登录作为用户和运行命令history我会看到历史的whoami命令条目?

回答

3

[email protected]:~ $ php -r 'exec("whoami");' 
micha[email protected]:~ $ history |tail -n3 
    506 history |tail -n3 
    507 php -r 'exec("whoami");' 
    508 history |tail -n3 

而对于Apache的情况:我尝试过了,两年前,看到它没有历史上的任何影响。只是尝试一下,如果你不知道......

编辑:

只是阿里纳斯...命令确实是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 

重要的一点是,这届如果它处于“交互模式”,e外壳只会将历史命令添加到历史记录中。当您执行类似cat|bashbash -c $exec_command时,不会创建任何历史记录条目。这就是exec()所做的,顺便说一句。这是一个像C命令一样的调用execl("/bin/sh", "-c", exec_command, NULL);

0

历史文件也被称为“bash历史”,并且只与在bash内部创建的调用有关,webserver本身在自己的环境中运行,每个系统调用这个过程(没有什么比这更多的),没有任何与bash的待办事项;)

+0

它与bash有很多关系。看看我的修改后的答案... – Michael

+0

@Michael它没有任何东西与bash混淆,因为问题是关于“apache”和“php”。 – michabbb

+2

内置的PHP函数'exec()'调用了bash shell,我在我的回答中证明了这一点 – Michael