web-dev-qa-db-ja.com

OS X Darwinで、catを使用してユーザーセッション間でテキスト入力を妨害できるのはなぜですか?

OS X Darwin:ユーザーID間でのターミナルセッションの中断


どのように、簡単に:

ターミナルでcat < /dev/ttys_を使用します。

私の質問

このOSX 10.9.2ダーウィンの動作は私には奇妙に思えます。なぜそれが起こっているのか、そしてそれが実際のOSまたはアプリケーションのバグであるかどうかを理解したいと思います。

行動を再現する手順

  1. 2つのターミナルウィンドウを開きます。
  2. デバイスパス、つまり「/dev/ttys001」、「/dev/ttys002」に注意してください
  3. 1つのターミナルウィンドウ(つまり、/dev/ttys001)で、Sudo -u [some other user] shを実行します。
  4. もう一方のターミナルウィンドウ(つまり、/dev/ttys002)で、cat < /dev/ttys001(またはデバイスパスが何であれ)を実行します。
  5. 最初のウィンドウに戻り、テキストを入力します。

予期しない動作

関連するターミナルウィンドウにテキストを入力すると、顕著な遅延が発生します。さらに、文字はどちらのウィンドウにも確実に表示されません。一部の文字は2番目のウィンドウにエコーされ、一部は最初のウィンドウに表示され、一部は消えるように見えます。

予期せぬ結果

これが私に関係する理由は、1人の特権のないユーザーによって実行された単純なコマンドが、別のユーザーのセッションを完全に中断する可能性があるように見えるためです。

予想される考えられる原因

  1. ターミナル2.4のテキスト入力のバグ(326)
  2. ユーザーがOSX10.9.2ダーウィンのバグを公約
2
muddletoes

3.何が起こっているのかについての誤解。

ユーザーID間でのテキストセッションに干渉していません。ここでセッションを実行しているのは1人のユーザーだけです。彼女をアリスと呼びましょう。アリスはコンソールにログインし、いくつかのターミナルエミュレーターを含む多数のアプリケーションを実行しています。

これらの端末の1つで、アリスはSudo -u bob shを実行します。現在、ボブのアカウントで実行されているシェルがありますが、ターミナルはアリスによって提供されています。ターミナルエミュレータプロセスは、ユーザーaliceとして実行されています。

cat /dev/ttys42をアリスとして実行すると、ボブが実行するシェルではなく、アリスが実行するターミナルエミュレーターをスヌーピングし、干渉することさえあります。

入力すると、端末からの入力を読み取っているプロセスのいずれかに各バイトがランダムに送信されるため、奇妙な現象が発生します。通常、端末にはフォアグラウンドプロセスが1つしかありません。ジョブ制御メカニズム、特に フォアグラウンドプロセスグループの管理 とSIGTTINシグナルによって確実になります。

/dev/ttys42はアリスが所有していることに注意してください。ボブがターミナルエミュレータを実行している場合、/dev/ttys42はボブが所有し、アリスは読み取りまたは書き込みができないため、アリスはそのレベルで干渉することはできません。ただし、この端末がアリスのGUIセッションにある場合、アリスはGUIレベルで干渉する可能性があります(たとえば、キーストロークをスヌーピングまたは挿入するか、ボブに、実行されたアプリケーションと実際に対話しているときに開始した端末と対話していると信じ込ませることによって)。アリスによる)。

ファイル(この場合は端末)に書き込むには、ファイルへの書き込み権限が必要です。デフォルトでは、ttyファイルはそれを使用するユーザーによって所有(および書き込み可能)であり、ttyグループによっても書き込み可能です。このグループにもデフォルトではrootのみが含まれています。したがって、他の人のセッションをいじることは許可されていません。

0
fkraiem