Linux で LDAP サーバー認証を使用して単一ユーザーに複数のログイン名を設定する

Linux で LDAP サーバー認証を使用して単一ユーザーに複数のログイン名を設定する

私の研究室には約 30 のシステム (スタンドアロン PC) があり、約 200 人の学生がそれを使用します。各システムには USER というアカウントがあり、そのパスワードは 123456 で、この 200 人が知っています。したがって、空いているシステムにアクセスして、しばらく作業します。使用状況は、レジスター ブック エントリによって記録されます。各ユーザーに個別のログインとパスワードを付与したいのですが、これは LDAP サーバーで簡単に実現できます。ただし、各 PC に 200 のユーザー アカウントを作成するつもりはありません。200 人のログインをすべて USER アカウント自体にマッピングしたいのです。これらのユーザーは同じプロファイルと同じホーム ディレクトリを持ちます。各人の研究室使用の日時をファイルに記録したいだけです。これは、LDAP または他のソフトウェアを使用して実行できますか?

答え1

SLESKE さんの意見に同意しますが、彼/彼女のコメントを詳しく説明するには、まずいくつかのことを行う必要があります。

Linux では、ログインを制御するライブラリを /etc/passwd で検索するのではなく、LDAP バックエンドを使用するようにリダイレクトする必要があります。

OpenLDAP を使用している場合は、次の 2 つの点を確認する必要があります。

LDAP クエリをキャッシュする NSCD (Name Server Caching Daemon)。これは、ユーザーがログインする各ホストで実行します。

NSSLDAP (LDAP 用ネーム サーバー スイッチ) は、ログイン時に NSCD を照会する接着剤です。NSCD は次に LDAP バックエンドを照会します。または、NSCD が古いか利用できない場合は、NSSLDAP が LDAP バックエンドを直接照会します。

したがって、ディストリビューションに含まれていない場合は、各ワークステーションに OpenLDAP、NSCD、および NSSLDAP をインストールする必要があります。LDAP プロトコルを話す方法を認識するクライアント ライブラリを取得するには、OpenLDAP が必要です。

次に、いくつかのファイルを編集する必要があります。

/etc/nscd.conf このファイルはキャッシュされるものを制御します。以下は、Samba サーバーとして機能する私のシステムの 1 つからのダンプです。

    enable-cache            passwd          yes
    positive-time-to-live   passwd          10
    negative-time-to-live   passwd          3
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           3
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           3
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

次に、nsswitch.ldap ファイルを変更する必要があります (DOC を読んでください。ここでは詳しく説明できません)。

とても重要なことが一つあります!!!!

LDAP サーバーがダウンしている場合は、ローカル ルート アカウントが引き続きログインできることを確認する必要があります。または、ワークステーションの 1 つにネットワークの問題がある場合は、引き続きログインできることを確認する必要があります。

そのため、Linux ボックスが起動すると、常に nsswitch.conf ファイルを次のような場所にコピーするスクリプトがあります。

パスワード: compat グループ: compat

ホスト: ファイル DNS ネットワーク: ファイル

サービス: ファイル プロトコル: ファイル rpc: ファイル ethers: ファイル ネットマスク: ファイル ネットグループ: ファイル ブートパラメータ: ファイル

自動マウント: ファイル エイリアス: ファイル

ログインに LDAP を使用する準備ができたら、nsswitch.conf ファイルを次のように置き換えます。

パスワード: ファイル ldap グループ: ファイル ldap シャドウ: ファイル ldap

ホスト: ファイル DNS ネットワーク: ファイル

サービス: ファイル プロトコル: ファイル rpc: ファイル ethers: ファイル ネットマスク: ファイル ネットグループ: ファイル ブートパラメータ: ファイル

自動マウント: ファイル エイリアス: ファイル

前者はローカルでのログインを許可し、後者は両方を許可しますが、NSCD によるキャッシュにより、NSCD が古くなるまでに時間がかかり、ログインの遅延や問題が発生します。

これについてはまだまだ語るべきことがたくさんありますが、これで始めるきっかけになれば幸いです。

ところで、私は Pozix Linux と Pozix Linux Small Business Server の開発者であり、この方法で 400 台を超える Samba システムを稼働させています。

同意します。TRS80 のコメントは有効ですが、/etc/passwd ファイルから LDIF ファイルを作成するために使用するスクリプトを次に示します。作成された LDIF ファイルは、LDAP データベースに取り込むために使用できます。このスクリプトを複数のワークステーションで実行する場合には、重複するアカウント名を取り除いて、一意の UID を持つ一意のアカウント名になるようにする必要があります。

cat /etc/passwd | while read i; do
  uid=`echo $i | cut -d : -f 1`
  uidNumber=`echo $i | cut -d : -f 3`
  gidNumber=`echo $i | cut -d : -f 4`
  gecos=`echo $i | cut -d : -f 5`
  homeDirectory=`echo $i | cut -d : -f 6`
  loginShell=`echo $i | cut -d : -f 6`
  userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`

  echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
  echo "objectClass: account"
  echo "objectClass: posixAccount"
  echo "cn: $gecos"
  echo "uid: $uid"
  echo "uidNumber: $uidNumber"
  echo "gidNumber: $gidNumber"
  echo "homeDirectory: $homeDirectory"
  echo "loginShell: $loginShell"
  echo "userPassword: $userPassword"

done

答え2

すべてのアカウントに対して uidNumber 属性と homeDirectory 属性を同じに設定すれば、おそらく希望どおりに動作するはずです。

答え3

各 PC に 200 個のユーザー アカウントを作成する必要はありません。Linux はすべてのユーザー情報を LDAP から取得できるため、アカウントはローカル (/etc/passwd など) に存在しません。ホーム ディレクトリは通常、ネットワーク ドライブ (NFS など) 上にあります。

これは標準的なアプローチです。これを行わない理由はありますか?

関連情報