外部(ブランチオフィスへの)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
shellacct
グループのユーザーのみにログインしてもらいたい。 pam_filter
で/etc/ldap.conf
を使用した多くの例を見つけましたが、次のような特定のuserDn
属性でフィルタリングすることによってのみフィルターが機能するようになりました。
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
だけを見ますか?
この種のものを探している他の人のためにこれをここに残したかっただけです。 /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
PAMモジュールpam_succeed_if.soこれには理想的なようです。実際、私はこれを多数のサーバーでこのように使用しています。 /etc/pam.d/common-account
からのMSADドメインを承認するUbuntu14.04のサンプル構成:
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
$ hostnameをサーバー名に置き換えます。 nix-adminsまたはauth- $ hostnameのメンバーになると、アクセスが許可されます。
ネストされた(間接的な)グループメンバーシップを認識するため、nslcd
(0.9+)の使用も検討してください。
pam_groupdn
の/etc/ldap.conf
オプションを使用して、目的の場所に移動できる場合があります。過去に同様の目的でpam_check_Host_attr
を使用しましたが、希望どおりに機能しました(つまり、LDAPエントリには、ログインしようとしているホスト名を持つHost
属性が必要でした。値として)。