
외부(내 지점) 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
in을 사용하는 많은 예를 찾았 지만 다음과 같은 /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
필터링용으로만 봅니까?
답변1
PAM 모듈pam_succeed_if.so이것에 이상적인 것 같습니다. 실제로 저는 여러 서버에서 이 방법을 사용합니다. 다음에서 MS AD 도메인에 권한을 부여하는 Ubuntu 14.04의 샘플 구성 /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
다음을 서버 이름으로 대체합니다.$호스트 이름. 회원이 되시면유닉스 관리자또는인증-$호스트 이름액세스 권한을 부여합니다.
또한 nslcd
중첩된(간접) 그룹 멤버십을 인식하므로 (0.9+) 사용을 고려하십시오.
답변2
pam_groupdn
옵션을 사용하여 /etc/ldap.conf
가고 싶은 곳으로 이동할 수 있습니다 . 나는 pam_check_host_attr
과거에 비슷한 목적으로 사용해왔고 정확히 내가 원하는 대로 작동했습니다(즉, LDAP 항목에는 host
로그인하려는 호스트 이름이 값으로 포함된 속성이 있어야 했습니다).
답변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