web-dev-qa-db-ja.com

LDAPなしで一元化されたユーザー認証を処理する方法は?

サーバーとWebアクセス用にユーザー用に一元化されたデータベースを作成しようとしています。これにより、ユーザーがアクセスできる場合はsshを介してログインし、Webサービスを介してアカウントとシステム情報を表示できるようになります。

LDAPについて読みましたが、Postgresqlなどの別のデータベースでユーザーを管理できるようにしたいので、データベースをWebサービスに簡単に結び付け、ユーザーの詳細が必要な場合はSQLの移行とスキーマを制御できます。 。

Puppetのようなものを調べましたが、それは私が探していることには少し多すぎて、現時点では複数のサーバーを管理する必要はありません。 Puppetがサーバーユーザー認証をどのように処理するかを調べようとしましたが、あまり多くの情報が見つかりませんでした。

私の質問:PostgresなどのLDAP以外の場所でユーザー情報の一元化されたデータベースを作成する方法はありますか?これを使用してsshおよびWebユーザーを認証できますか?

3
josh

はい。

LinuxおよびUNIXシステムでのシステム認証は、何十年もの間、PAM、プラガブル認証モジュールを介して行われてきました。

PAMの原則は、新しい認証バックエンドを使用する場合、システム認証、ssh、ftp、telnetSudoなどの認証を使用するすべてのアプリケーションを再コンパイルする必要がないということです。正しいモジュールとPAMを使用するすべてのものをロードするだけです。新しい認証バックエンドを自動的に使用できます。

したがって、アプリケーションがPAMを使用していて(そして多くの場合)、すでに存在するか、または完了した代替ユーザー/認証ストア用のPAMモジュールを作成できます。

pam-pgsql は、PostGresSQLデータベースのテーブルを使用するPAMモジュールの1つです。これにより、Webアプリケーションとの統合も簡単になります。または、認証されたアクセスにWebサーバーのPAM統合を使用することもできます。

さらに、一部のアプリケーションは、PAMの外部でデータベースバックエンドとネイティブに統合されています。

4
HBruijn

LDAPは、Linuxマシンで実際に3つのことを行います。

認証:

これはPAMの領域であり、ユーザー名/パスワードを使用してユーザーがユーザーであることを確認します。

承認:

ここで、PAMがニーズを満たしていない、PAMがオン/オフになっている、承認を取得するかしないかのいずれかです。承認はグループメンバーシップに関するものです。

属性:

あなたのホームディレクトリはどこですか?あなたの名前を教えて?

最後の2つの項目は、nssバックエンドによって処理されます。 /etc/nsswitch.confを見ると、標準のバックエンドを使用してシステムコールをLDAPルックアップに変換していることがわかります。

LDAPを使用したくない場合は、使用するデータベースをサポートする別のバージョンのnssプラグインライブラリを使用する必要があります。これらのいくつかは存在しますが、あなたはかなり大きなホイールを再発明しています。

Puppetに関しては、クライアント認証にssl証明書を使用します。 sshのやり方はやや似ています。

あなたの人形の質問は、実際には関連していないので、実際には別の質問である必要があります。

私はあなたが何を求めているのかをもう少し考えました、そしてあなたが望むものを実装することができる一つの方法はパペットモジュール内からデータベースクエリを使うことです。 puppet言語はそれ自体のものであり、汎用言語の拡張ではないため、ユーザー名のリストを返すpuppetリソースプロバイダーを作成/検索してから、puppetに/ etc/passwdなどを管理させる必要があります。マシン上のファイル。

これは、chefで実装する方が簡単です。人形でも可能だと思います。データベースエントリからLDAPサーバーを更新することも可能です(およびIMHOのベストプラクティス)。それは実際には、操作する規模と、変更をどれだけ迅速に伝播するかによって異なります。