Linux で LDAP ユーザー ログインをフィルターする方法は?

Linux で LDAP ユーザー ログインをフィルターする方法は?

外部(ブランチ オフィス)LDAP(具体的には Novell Edirectory)経由でユーザー ログインを認証するように、複数の Linux サーバー(ubuntu 12.04)をセットアップしています。これはうまく機能していますが、LDAP グループのメンバーシップによってユーザー ログインをフィルター処理しようとしています。

Edir ではユーザー アカウントは次のようになります。

dn: cn=mmcloud,ou=eng,o=lsi
loginShell: /bin/bash
homeDirectory: /home/mmcloud
gidNumber: 2001
uidNumber: 9418
mail: xxxxxx@xxxxxxxxx
uid: mmcloud
initials: Q
givenName: Moran
sn: McCloud
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: ndsLoginProperties
objectClass: Person
objectClass: Top
objectClass: posixAccount
eMailAddress: 7#xxxxx@xxxxxxxxxxxx
cn: mmcloud

Edir でのグループ エントリは次のようになります。

dn: cn=shellacct,ou=groups,ou=eng,o=lsi
memberUid: jbarlin
memberUid: mmccloud
memberUid: ssemryn
memberUid: cdesmon
gidNumber: 2009
objectClass: groupOfNames
objectClass: Top
objectClass: posixGroup

グループ内のユーザーだけがログインできるようにしたいです。 in をshellacct使用する例はたくさん見つかりましたが、次のような特定の属性でフィルタリングすることによってのみ、フィルターを機能させることができました。pam_filter/etc/ldap.confuserDn

 pam_filter                  &(objectclass=user)
 pam_filter                  &(objectclass=Person)
 pam_filter                  &(loginShell=/bin/bash)

groupDn私がしたいのは、グループメンバーシップでフィルタリングすることです。cn=shellacct,ou=groups,ou=eng,o=lsi (gid=2009). 私は以下を試しました/etc/ldap.conf:

 pam_filter                  &(objectclass=posixAccount)(|(gidNumber=2009))
 pam_filter                  |(member=cn=shellacct,ou=groups,ou=eng,o=lsi)
 pam_filter                  |(memberUid=cn=shellacct,ou=groups,ou=eng,o=lsi)

pam_filter私がやりたいことに対して機能しますか、それともuserDnフィルタリングのためだけに機能しますか?

答え1

PAMモジュールpam_succeed_if.soこれには理想的なようです。実際、私は多数のサーバーでこの方法を使用しています。Ubuntu 14.04 から MS AD ドメインに承認するサンプル構成/etc/pam.d/common-account:

account         sufficient              pam_unix.so
account         requisite               pam_ldap.so
account         sufficient              pam_succeed_if.so user ingroup unix-admins
account         sufficient              pam_succeed_if.so user ingroup auth-$hostname
account         requisite               pam_deny.so

サーバー名を代用$ホスト名のメンバーであることunix管理者またはauth-$ホスト名アクセスを許可します。

nslcdネストされた(間接的な)グループ メンバーシップを認識するため、(0.9+)の使用も検討してください。

答え2

目的の場所に到達するには、pam_groupdnのオプションを使用できる可能性があります。私は過去に同様の目的で を使用したことがあり、まさに希望どおりに機能しました (つまり、LDAP エントリには、ログインしようとしているホスト名を値として持つ属性が必要でした)。/etc/ldap.confpam_check_host_attrhost

答え3

この種のものを探している人のために、ここに残しておきたかっただけです。 を見てください/etc/security/access.conf。 ユーザー/グループ/ローカル/LDAP を認識します。 これが私が最終的に行ったことです。 ACL のワンストップショップとして便利です。

pam_access.confさまざまなファイルで有効にする必要があります/etc/pam.d/

注意してくださいシステム アップデートにより、これらの編集がリセットされる可能性があります。この問題を回避する方法がわかりません。pam_succeed上記の説明の方が適切かもしれません。

# grep access /etc/pam.d/*
...
/etc/pam.d/login:# Uncomment and edit /etc/security/access.conf if you need to
...
/etc/pam.d/login:account required pam_access.so
/etc/pam.d/sshd:# Uncomment and edit /etc/security/access.conf if you need to set complex
...
/etc/pam.d/sshd:account required pam_access.so

access.conf

# allow root from the backup system
+ : root : 10.10.16.2
# allow root from cron, serial port and tty consoles
+ : root : cron crond :0 ttyS0 tty1 tty2 tty3 tty4 tty5 tty6
# allow ldapusers on 10.0.0.0/8 subnet
+ : ldapuser4 ldapuser1 ldapuser7: 10.0.0.0/8
# allow users in ldap posixGroup on 10.10.16.0 subnet
+ : ldapssh : 10.10.16.0/24
# allow everyone in the localhost sftponly group from anywhere
+ : sftponly : ALL
# drop everyone else from anywhere
- : ALL : ALL

関連情報