鉴于apache在我的服务器上运行的用户是真实用户并且具有带有.history文件的主目录,将通过exec()
运行命令会导致条目生成在那个文件中?PHP的exec()函数和.history文件
例如,如果我跑exec("whoami")
和我登录作为用户和运行命令history
我会看到历史的whoami
命令条目?
鉴于apache在我的服务器上运行的用户是真实用户并且具有带有.history文件的主目录,将通过exec()
运行命令会导致条目生成在那个文件中?PHP的exec()函数和.history文件
例如,如果我跑exec("whoami")
和我登录作为用户和运行命令history
我会看到历史的whoami
命令条目?
号
[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|bash
或bash -c $exec_command
时,不会创建任何历史记录条目。这就是exec()
所做的,顺便说一句。这是一个像C命令一样的调用execl("/bin/sh", "-c", exec_command, NULL);
历史文件也被称为“bash历史”,并且只与在bash内部创建的调用有关,webserver本身在自己的环境中运行,每个系统调用这个过程(没有什么比这更多的),没有任何与bash的待办事项;)
它与bash有很多关系。看看我的修改后的答案... – Michael
@Michael它没有任何东西与bash混淆,因为问题是关于“apache”和“php”。 – michabbb
内置的PHP函数'exec()'调用了bash shell,我在我的回答中证明了这一点 – Michael