xtermが/dev/ptmxファイルを開くことができないのはなぜですか?

xtermが/dev/ptmxファイルを開くことができないのはなぜですか?

gnome-terminal/dev/ptmxファイルを開きます。

ここに画像の説明を入力してください。

しかし、xterm開けません。

ここに画像の説明を入力してください。

すべての端末エミュレータがこのファイルを開く必要があると思いますが、/dev/ptmxなぜxtermはこのファイルを開くのですか?


編集する:これはls -ld "$(command -v xterm)"(に応じて スティーブン・チャジェラス):

ここに画像の説明を入力してください。

ベストアンサー1

Xtermはすでに/dev/ptmx開いていますが、これは見ることができません。理由は次のとおりです。

実行xterm権限にはS_ISGID(set-group-ID)ビットが設定されており、グループが所有していますutmp

この方法は、エントリを(および正確なパスはシステムによって異なる場合があります)xtermに追加することによってセッションがまたはの出力に表示されるように設定されます。/var/run/utmp/var/log/wtmpwholast

これらの権限を使用すると、実行xterm時に実行するプロセスでその権限を表示できます。効果的なutmpグループIDはグループのIDに変更されます(読むグループIDは変更されず、そのまま残ります。これにより、utmp書き込みモードでレコードを開いてログインする権限が付与されます。wtmp

Linuxでは、セキュリティ対策として、root実効ユーザーIDが実際のユーザーIDと異なる場合、または実効グループIDが実際のグループIDと異なるプロセス用に開かれたファイルのみをリストできます。 (これらのプロセスには他のプロセスと比較して権限があることがわかります/proc/<pid>fd。)dr-x------ root rootdr-x------ you your-group

そのため、lsof通常のユーザーとして実行すると、xtermプロセスの開いたファイルを一覧表示できません。lsofとして実行する必要がありますroot

動作する理由については、gnome-terminalsいくつかの可能性があります。

  • gnome-terminalログイン履歴にエントリを追加しません(私のシステムの場合)。
  • gnome-terminal使用utempter 助ける人(この場合はsgid utmp)ログイン履歴を追加します。これが私がシステムでxtermやりたいことですkonsole
  • gnome-terminalutmpログイン履歴を更新した後(xterm実行されていない)、有効なユーザーIDを実際のユーザーIDにリセットします(特別なアクセス権を一時的に放棄します)。

おすすめ記事