LDAPサーバーをSolarisサーバーとRHELサーバーの両方で使用しており、より多くのサーバーをRHELに移行することを計画しています。ただし、すべてのRed HatサーバーでLDAPに問題があります。
「getent passwd」と入力すると、このサーバーにアクセスできるユーザーだけでなく、LDAPサーバー全体のすべてのユーザーが表示されます。通常、約10〜50人がサーバーにアクセスできるため、Solarisはこのユーザーのリストを出力し、Red HatフラットアウトはLDAPに存在するすべてのユーザーのリストを出力します(約650)。
私はSolarisのような動作を好みます。サーバーへのアクセス許可を持つユーザーのみが「getent passwd」と表示されます。
サーバーにアクセスできるユーザーのみを一覧表示するようにRHELを構成するにはどうすればよいですか?
これはデフォルトの動作です。RHELはPAMを使用するユーザーを制限し、nssは指定されたLDAP検索ベースで使用可能なすべてのユーザー/グループエントリを解決しようとします。
システムにnfsマウントがあり、マシンにアクセスできないユーザーが所有するファイルが含まれている場合がありますが、すべてがOSに表示されている場合はユーザーを解決できます(アクセスはPAMによって制限されているため、ユーザーはアクセスできません)ログインできます)。
次のいずれかのオプションを使用して、動作を変更できます。
SSSDを使用します。デフォルトではユーザー/グループは列挙されません。 (つまり、getent passwdはローカルユーザーのみをリストします)。
LDAPフィルターを使用して、必要なユーザーのみがマシンに表示されるようにします。これは、ユーザーのフィルタリングに使用できる特定のフィルターがある場合にのみ可能です(たとえば、グループのmemberof属性を使用する)。
ユーザーをフィルタリングするには、互換モードを使用します。
たとえば:
nsswitch.conf
passwd: files compat
passwd_compat: ldap
in passwd file, add +@netgroup.
/etc/security/access.conf
でアクセスを制限しています。これにより、サーバーにアクセスできるユーザーは制御されますが、サーバーに対してどのユーザーが可視に影響を与えることはありません。これは通常、あなたが望むものです。ユーザーalice
がサーバーにログインできない場合でも、彼女が見たい共有ファイルシステム上のファイルを所有している場合:
$ ls -l ~alice
-rw-rw-r--. 1 alice alice 0 Aug 1 09:09 afile
の代わりに:
$ ls -l ~alice
-rw-rw-r--. 1 5234 5234 0 Aug 1 09:09 afile
つまり、ユーザーがシステムにログインできない場合でも、システムにユーザーのことを知らせたいのです。
システムに表示されるユーザーのセットを制限する場合は、NSSサブシステムを構成して、ある種のLDAPフィルターを実装する必要があります。その方法は、使用しているツールによって異なります。
user993553は、LDAPと統合するためのレガシーツールであるnss_ldap
について言及しています。
一部の新しいディストリビューションは [〜#〜] sssd [〜#〜] を使用します。これには、LDAP
モジュールにldap_service_search_base
パラメータが含まれます。
nslcd
プログラムには、各マップに適用できるfilter
オプションがあります
使用するメカニズムは、実行しているRHELのバージョンによって異なります。RHEL6にはnslcd
とsssd
の両方があります(私はnslcd
を使用しています)。 nss_ldap
に制限されています。
オプションの場合は、次のようにLDAPスキーマを拡張できます。
から http://www.secure-computing.net/wiki/index.php/OpenLDAP/Authentication
このホスト検証を取得するために、posixAccount objectClassのHost属性を許可するカスタムスキーマを追加します。新しいスキーマはここからダウンロードできます。この新しいスキーマを使用するには、scn.schemaファイルを解凍して/ usr/local/etc/openldap/schemaに保存し、slapd.confファイルに次の行を追加します。
...
次にnss_ldap.conf nss_base_passwd dc=base,dc=local?one?host=thismachinehost
を追加します
構文はbase?scope?filterです。
これはfreebsdでテストされ、getent passwdはフィルターに一致するユーザーのみをリストします。