簡體   English   中英

是否可以使用pexpect生成將顯示在bash歷史記錄中的bash shell命令?

[英]Is it possible to use pexpect to generate bash shell commands that will show up in bash history?

作為系統管理員,我正在嘗試在虛擬機上模擬用戶以測試日志文件監視。

模擬的用戶將自動執行應顯示在bash歷史記錄中的各種任務,例如“ ls”,“ cd”,“ touch”等。重要的是,他們會顯示在bash歷史記錄中,因為記錄了bash歷史記錄。

我曾考慮過直接編寫bash歷史記錄,但希望更准確地模擬用戶行為。 原因是bash歷史記錄不是唯一要監視的日志文件,並且如果同一事件的日志保持同步會更好。

詳細信息我正在CentOS Linux版本7.3.1611上安裝Python 2.7.5

我已經嘗試過使用pexpect.run('ls')或pexpect.spawn('ls'),在任何一個命令的bash歷史記錄中都不會顯示'ls'。

Bash日志記錄僅適用於交互式Shell。 這將打開一個與Bash的交互式會話並在其中運行ls ,盡管如果自定義.bashrc來更改PS1可能會失敗。

child = pexpect.spawn('bash')
child.expect(r'\$')
child.sendline('ls')
child.expect(r'\$')
child.close()

話雖如此,Bash的歷史很容易被繞開。 它僅在交互式會話結束時編寫,並且可以在會話期間進行更改,因此

$ rm very_important_file
$ history -c

要么

$ kill -9 $$

不會出現在.bash_history 即使在受限的Bash中,這也是可能的。

如果您需要更可靠的產品,我建議您設置系統審核

簡短的答案似乎是“否”,您無法使用pexpect做到這一點。

審計是跟蹤用戶輸入的一種可能替代方法,但是我還沒有弄清楚如何記錄諸如“ ls”和“ cd”之類的命令,因為它們沒有調用系統execve()命令。 我發現最好的解決方法是使用script命令,該命令將打開另一個交互式終端,其中會記錄提示中輸入的每個命令。 您可以使用腳本命令輸出到的文件(默認為打字稿)記錄所有用戶命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM