web-dev-qa-db-ja.com

GDMはXサーバーに対してどのように認証しますか?

通常、ユーザーのホームディレクトリの.xauthorityファイルに保存されている「マジッククッキー」を使用してXサーバーに対して認証する必要があることを考えると、GDMはどのように機能しますか(ほとんどのログインプロセスと同様に、rootとして実行されます)。 )ログイン画面を描画するためにXサーバーに接続しますか? rootユーザーのホームディレクトリに保存されている.xauthorityファイルを使用しますか、それとも完全に認証をバイパスしますか?

5
Bratchley

私のシステムではpsがこれを見つけます:

/usr/bin/Xorg -br :0 vt7 -nolisten tcp -auth /var/lib/xdm/authdir/authfiles/A:0-wEJjac

ディスプレイマネージャーは、パラメーターとして使用する認証ファイルでXを開始します。そのファイルを直接使用できます。

編集1:

私の場合はKDMであり、GDMではありません。

4
Hauke Laging

あなたの理論をテストしてください。これらのファイルをルートの/rootディレクトリから一時的に移動し、これらのファイルが次のいずれかであるかどうかを確認します。

  1. ログインできないように問題を引き起こします
  2. /rootでファイルを再生成します

GDMリファレンスマニュアル

GNOME Display Manager Reference Manual を見てみましょう。ドキュメントを見ると、rootはXとまったく対話していないように見えます。これは、これを行うユーザーの実効ユーザーIDで別のプロセスをフォークします。

GDMリファレンスマニュアル-GDMデーモンセクションからの抜粋

GDMは、シンプルさとセキュリティを念頭に置いて作成されました。全体的な設計コンセプトは次のとおりです。

起動時に、gdmデーモンはその構成ファイルgdm.confを解析します。ローカルディスプレイごとに、gdmはXserverとスレーブプロセスをフォークします。メインのgdmプロセスは、リモートディスプレイからのXDMCPリクエストをリッスンし、ローカルディスプレイセッションを監視します。

Gdmスレーブプロセスが表示を開き、グラフィカルログインプログラムであるgdmloginを起動します。 gdmloginは専用ユーザーとして実行され、パイプを介してスレーブプロセスと非同期的に通信します。

GDMは、PAM(Pluggable Authentication Modules)の存在に大きく依存していますが、レガシーシステムでは通常のcrypt()およびシャドウパスワードをサポートしています。

リモートディスプレイは、GDMホストのXDMCPポートに接続できます。 gdmは、TCPラッパー構成ファイルのgdmサービスセクションで指定されたホストへのアクセスを許可します。GDMは、TCPラッパーがないシステムでのリモートディスプレイアクセス制御をサポートしていませんただし、XDMCPサポートは完全にオフにすることができます。

GDMデータベース

認証ファイルが保存される場所はディストリビューション固有のようです。 Red Hatディストリビューションの場合、それらは/var/run/gdmの下にあり、他のOSの場合、それらは/var/lib/xdmの下にあります。

これが私のFedoraディレクトリです:

$ pwd
/var/run/gdm

$ tree 
.
├── auth-for-gdm-8DkDnQ
│   └── database
└── auth-for-saml-PSW952
    └── database

2 directories, 2 files

したがって、2つの認証ディレクトリがあります。1つはユーザーgdm用で、もう1つはユーザーsaml用です。

$ strings auth-for-saml-PSW952/database
grinchy
MIT-MAGIC-COOKIE-1
-G9 
[root@grinchy gdm]# strings auth-for-gdm-8DkDnQ/database
grinchy
MIT-MAGIC-COOKIE-1
-G9 

データベースファイルの内部を見ると、MIT-MAGIC-COOKIESに関する情報があります。

3
slm