鉴于apache在我的服务器上运行的用户是真实用户,并且主目录包含.history文件,是否会通过exec()
运行命令导致在该文件中生成条目?
例如,如果我运行exec("whoami")
并以该用户身份登录并运行命令history
,我会在whoami
命令的历史记录中看到一个条目吗?
答案 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|bash
或bash -c $exec_command
之类的操作时,不会创建历史记录条目。这是exec()
的作用,顺便说一下。这是一个像C命令execl("/bin/sh", "-c", exec_command, NULL);
答案 1 :(得分:0)
历史文件也称为“bash历史”,只与调用有关,这些调用是在bash内部进行的,webserver本身是在自己的环境中运行的,每个系统调用这个进程(只不过是这个) ,与bash没什么关系;)