簡體   English   中英

在偽終端上窺探

[英]Snooping on pseudo terminal

我想編寫一個程序,可以在不影響原始終端的情況下捕獲偽終端的輸入/輸出。 它可以比作將script指向/dev/pts/<n>

用例:用戶 ssh 進入我的機器並運行一個交互式工具。 通過審計,我可以看到正在運行的命令,但我還需要查看輸出。 我可以在/dev/pts/<n>上收聽,但是原始登錄用戶沒有得到輸出。

我想編寫自己的程序來處理這種情況。 這個問題真的可以解決嗎,如果可以,我應該在哪里尋找解決方案?

這可以通過在 ssh 服務器進程上使用ptrace(2) ,該進程處理偽終端的主端(通常是在終端中運行的 shell 的父進程)。

您可以從本身使用ptrace(2) strace開始,例如

strace -p <pid> -e trace=read,write \
  -e read=<fds opened to /dev/ptmx> \
  -e write=<fds opened to /dev/ptmx>

這將向您顯示讀取或寫入該偽終端的所有內容。 您可以從ls -l /proc/<pid>/fd獲取“打開到 /dev/ptmx 的 fds”。

然后,您可以查看strace正在做什么——例如,通過使用

strace -e trace=ptrace,process_vm_readv strace ...

並通過研究其源代碼。

您當然可以修改 ssh 服務器本身以記錄所有這些信息,或者只是調整其配置選項(例如LogLevel - 可以在每個用戶或連接主機的基礎上進行修改)。

暫無
暫無

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

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