2014-05-05 68 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