私の研究室には約 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 など) 上にあります。
これは標準的なアプローチです。これを行わない理由はありますか?