異なる端末のプロセスの標準入力に対する配管の危険

異なる端末のプロセスの標準入力に対する配管の危険

悪意のある好奇心で、それぞれbashシェルを実行する2つの端末を開きました。最初の項目には、次のように入力します。

$ echo $$
11458

第二に:

$ echo -n "echo this command" >> /proc/11458/fd/0

その後、そのテキストは文字通りecho this command最初の端末のプロンプトにパイプされます。ただし、最初の端末に入力すると、テキストはコマンドとして実行されず、新しいプロンプトのみが表示されます。

2回目の試みでは、最初の端末で次のコマンドを実行しました。

$ read line;echo $line

読み取りが入力を待っている間に、/proc/11458/fd/02番目の端末にいくつかのテキストを再表示します。テキストは最初の端末に表示されますが、<enter>最初の端末を押すと終了readし、echo $line入力内容を読み取れなかったというメッセージが表示されます。

だから私はまだ害を及ぼす方法を見つけることができませんでした。私ができることは、2番目の端末で最初の端末のテキストを変更することだけです。もちろん、最初の端末のスクリーンリーダーはこれを認識します。スクリーンリーダーを使ってマウスの選択や端末機能について考えています。たとえば、Save Contents ...両方を試してみました。

しかし、ファイルの終わりやその他の制御文字を最初の端末にエコーする方法を知っている場合は、最初のstdin端末でプロセスを混乱させませんか?

答え1

パート1 - あなたの質問に対する答えになりましたか?プロセスの標準入力に書き込む

パート2 - 自分が所有するすべてのプロセスに属する端末に書き込んで読むことができます。ただし、標準のUNIX権限を使用すると、他のユーザーログインに関連するデバイスに書き込んだり読み取ったりすることはできません。

ls -l /proc/$$/fd/0
lrwx------ 1 roaima roaima 64 Nov 27 13:19 /proc/7859/fd/0 -> /dev/pts/0

ls -lL /proc/$$/fd/0
crw--w---- 1 roaima tty 136, 0 Nov 27 13:24 /proc/7859/fd/0

デバイスに書き込むことができます:

( tput smso; echo 'surprise!' ) >/dev/pts/0

答え2

これは簡単な説明かもしれません:

端末プロセスが端末(stdinstdoutおよびstderrすべて同じデバイス/ptyを指す)に書き込む場合、その出力は次の入力になりません。確かに。

エコリッチ

入力と効果が異なりますfooenter

それでは、端末に書き込む他のプロセスが他のプロセスの端末入力になるのはなぜですか?無意味。

ファイルとは異なり、(疑似)端末を使用すると、データソースがまったく異なるもの(キーボードまたはプログラム)なので、書き込みおよび読み取るデータは関係ありません。望むよりman 7 pty。擬似端末には、端末アプリケーションで使用されるクライアントと、クライアント入力を生成するマスターがあります。

私のターミナルエミュレータはkonsole(PID 40818)で、現在シェル/ターミナルのみを実行しています。

start cmd:> ll /proc/40818/fd
insgesamt 0
lr-x------ 1 hl hauke 64 27. Nov 15:06 0 -> 'pipe:[1177680901]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 1 -> 'socket:[89302]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 10 -> /dev/dri/renderD128
lrwx------ 1 hl hauke 64 27. Nov 15:06 11 -> /dev/dri/renderD128
lrwx------ 1 hl hauke 64 27. Nov 15:06 12 -> /dev/dri/renderD128
lrwx------ 1 hl hauke 64 27. Nov 15:06 13 -> /dev/dri/renderD128
lrwx------ 1 hl hauke 64 27. Nov 15:06 18 -> /dev/ptmx
lrwx------ 1 hl hauke 64 27. Nov 15:06 19 -> /dev/pts/40
lrwx------ 1 hl hauke 64 27. Nov 15:06 2 -> 'socket:[89302]'
l-wx------ 1 hl hauke 64 27. Nov 15:06 21 -> 'pipe:[1177664260]'
lr-x------ 1 hl hauke 64 27. Nov 15:06 28 -> 'pipe:[1177664264]'
l-wx------ 1 hl hauke 64 27. Nov 15:06 29 -> 'pipe:[1177664264]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 3 -> 'socket:[1177673938]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 4 -> 'anon_inode:[eventfd]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 5 -> 'anon_inode:[eventfd]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 6 -> 'socket:[1177650969]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 7 -> 'anon_inode:[eventfd]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 8 -> 'socket:[1177677086]'
lrwx------ 1 hl hauke 64 27. Nov 15:06 9 -> 'socket:[1177677087]'

ec:0   15:06:36  hl@monster:~
start cmd:> tty
/dev/pts/40

/dev/pts/40シェルはを使用しますが、ターミナルエミュレータはに書き込むのを見ることができます/dev/ptmx。ターミナルエミュレータのファイル記述子のみを18/dev/pts/40に書き込むことができます。別のプロセスが開かれると、/dev/ptmx新しい擬似端末が作成され記録されます。

関連情報