ログインと su 内部構造

ログインと su 内部構造

Linuxでユーザー権限がどのように機能するかを知りたいです。カーネルがinit起動し、root で始まります。そうですか?その後、Initは起動スクリプトを実行し、再びrootとして実行されますgettyagetty)。login私はAgettyが単にユーザー名を読んで実行され、まだrootとして実行されていると思います。まだ興味深い内容はありません。しかし、何が役に立ちますか?ログインする? 「ログインしようとしました」より優れているものが見つかりませんでした。ログインが一致するパスワードを見つけたとし(一般ユーザーとしてログインしようとした場合)、ユーザーIDはどのように変更されますか?システムコールが必要なようですが、見つかりません。 (おそらく私は目が遠いのでしょうか?)


また、sususetuid」ビットが設定されているため、実行時に常にrootとして実行されます。ただし、通常のユーザーとしてログインするように求められた場合は、ユーザーIDを再度変更する必要があります。ユーザーを変更する必要があるときに同じ「魔法」が発生することを正しく理解していますかsuloginそれでは、なぜ2つの異なるプログラムがありますか?ログインを実行すると、他の種類の深刻なビジネスが発生しますか?

ベストアンサー1

ログインプログラムの機能はいくつかの部分に分かれています。ログインプログラムは、ログインしようとしているユーザーとは異なる方法で対話します。ここにいくつかの例があります。

  • login:テキスト端末の入力を読み込みます。
  • su:ログインしたユーザーが呼び出して、コマンドライン引数からほとんどのデータと端末から認証データ(パスワード)を取得します。
  • gksu:と似ていますsuが、Xから認証データを読み込みます。
  • rlogind: TCP 接続で入力を受け取るログイン規約
  • sshd: TCP 接続で入力を受け取るSSH規約
  • Xディスプレイマネージャ(xdm、gdm、kdm、...):同様ですloginが、Xディスプレイの入力を読みます。

これらのプログラムは同様の方法で動作します。

  1. 最初の部分は確認する:プログラムはユーザーからいくつかの入力を読み取り、ユーザーにログイン権限があることを確認します。従来のアプローチは、ユーザー名とパスワードを読み、そのユーザーがシステムのユーザーデータベースに記載されていること、ユーザーのパスワードが正しいことを確認することです。ユーザーが入力した内容はデータベースの内容です。しかし、他の可能性もたくさんあります(使い捨てパスワード、バイオメトリクス、権限転送など)。

  2. ユーザーにどのアカウントでログインする権限があるかを確認したら、ログイン手順を使用して、このセッション中にユーザーが属するグループなどのユーザー権限を設定します。

  3. ログインプロセスでは、アカウントの制限も確認できます。たとえば、ログイン時間または最大ログインユーザー数を適用したり、特定のユーザーへの特定の接続を拒否したりできます。

  4. 最後に、ログインプログラムはユーザセッションを確立する。いくつかのサブステップがあります:

    1. ユーザー、グループ、制限などの承認で決定されたプロセス権限を設定します。ここでは、このサブステップの簡単な例を見ることができます。(ユーザーとグループのみを処理します)。デフォルトのアイデアは、ログインプログラムがこの時点でまだrootとして実行されているため、最大の権限を持つことです。まず、root ユーザーを除くすべての権限を削除し、最後にsetuid最も重要な権限の削除を呼び出します。
    2. ユーザーのホームディレクトリがマウントされ、「メールがあります」というメッセージが表示されることがあります。
    3. ユーザーとしてプログラム、通常はユーザーのシェルを呼び出します(コマンドがlogin指定されていないsu場合sshd、XディスプレイマネージャはXセッションマネージャまたはウィンドウマネージャを呼び出します)。

現在、ほとんどのユニPAM(プラグ型認証モジュール)ログインサービスを管理する統合された方法を提供します。 PAMはその機能を次のように分割します。4部品:「auth」には認証(上記1)と承認(上記2)が含まれています。上記の3と4のような「アカウント」と「パスワード」はログインには使用されませんが、認証トークンの更新には使用されます(パスワードなど)。

おすすめ記事