ログインシェルのutmpエントリを作成する必要がありますか?

ログインシェルのutmpエントリを作成する必要がありますか?

私の観察:

  1. 新しい端末を開くと(ドワーフ/lx):

    • 新しい/dev/pts/X使用
    • whoこれらのどれもリストされていません。
    • 最初の文字echo $0ではないため、-ログインシェルではありません。
  2. ssh同じユーザーを使って同じコンピューターに入ると

    • 新しい/dev/pts/X使用
    • whoこれらをリストしてみてください
    • 最初の文字echo $0-なのでログインシェルです。
  3. 新しく開くと端末 (ctrl-alt-Fxx)

    • 新しい/dev/ttyXX使用
    • whoこれらをリストしてみてください
    • 最初の文字echo $0-なのでログインシェルです。
  4. 走ればsu -

    • 同じ/dev/pts/X使用su -発行された場所)
    • whoこれらのどれもリストされていません。
    • 最初の文字echo $0-なのでログインシェルです。

結論として:

  1. 新しい pty を生成しても、utmp(?) に項目は自動的に生成されません。

質問:

  1. who現在ログインしているユーザーのリストを表示している場合は、各ログインシェル(?)のエントリを表示する必要があります。ただし、rootユーザーログインエントリは表示されませんsu -。なぜですか?

編集する:この時点で私が理解できるもう一つのことは、「utmpに新しいエントリを作成する前に新しいpty / ttyとログインシェルでなければなりません」ということです。

ベストアンサー1

まず、whoログインシェルやそのようなものを気にしないでください。ただutmp項目をダンプします。ログインしていない端末、グラフィックセッション、FTP接続(完全に設定されたtty "line"名を含む)のエントリがある可能性があります。

2. utmpエントリの作成手動- ログインを処理するプログラムが呼び出されたときにのみエントリを取得できますpututline(…)。たとえば、sshdは常にこれを行い、端末エミュレータはよくこうしてください(常にそうではありません)。su決してこれをしないでください。

su新しいptyを割り当てないため、utmpエントリも追加できないことを覚えておいてください。そうしないと、同じttyに対して複数のエントリが生成され、いくつかのプログラムが混乱する可能性があります。)

おすすめ記事