
수많은 웹과 튜토리얼을 검색했지만 내 문제에 대한 답을 찾을 수 없습니다.
비밀번호 정책 오버레이를 사용하여 OpenSUSE 12.3 시스템에 OpenLDAP 2.4를 설정했습니다. 클라이언트는 libnss-ldap 및 libpam-ldap 패키지가 설치된 Linux Mint 17.1 시스템입니다. 클라이언트와 서버는 자체 서명된 인증서와 함께 TLS를 사용하도록 구성됩니다(서버는 CA로 작동하고 자체 인증서에 서명함). pwdReset: TRUE
사용자에게 속성을 추가하기 전까지는 모든 것이 잘 작동합니다 .
내 의도는사용자가 다음 로그인 시 비밀번호를 변경하도록 강제. 그러나 이 속성을 설정한 후에는 사용자가 더 이상 인증할 수 없습니다. 사용자를 'su'(또는 로그인)하려고 하면 "인증 실패" 오류가 발생합니다. 또한 syslog에는 다음 메시지가 표시됩니다.
Mar 4 07:27:11 client-desktop nslcd[3198]: [90cde7] <authc="johndoe"> ldap_result() failed: Insufficient access: Operations are restricted to bind/unbind/abandon/StartTLS/modify password
Mar 4 07:27:11 client-desktop nslcd[3198]: [dcc233] <authc="johndoe"> cn=John Doe,ou=people,cd=domain,dc=com: lookup failed: Invalid credentials
이 메시지는 사용자 자격 증명이 더 이상 유효하지 않다는 것을 알려줍니다. 이는 비밀번호를 재설정했지만 사용자에게 비밀번호를 변경해야 한다는 메시지가 표시되지 않기 때문에 이는 타당합니다. 또한 클라이언트가 전문가가 아니기 때문에 ldappasswd와 같은 openldap 유틸리티의 사용을 방지하고 싶습니다. 따라서 나는 그들이 자신의 비밀번호를 변경하기 위해 계속해서 일반적인 passwd 명령을 사용하기를 원합니다. 최소한 pwdReset이 설정되지 않은 경우에는 가능합니다. 또한 속성을 0으로 설정하여 이 동작을 수행할 수 있지만 shadowLastChange
최소 8자 이상의 비밀번호 사용을 강제하려고 하기 때문에 비밀번호 정책으로 모든 작업을 수행하고 싶습니다. 그건 그렇고, 이 기능은 완벽하게 작동합니다.
이는 누락된 내용이 있는지 확인할 수 있도록 내 기본 DN을 발췌한 것입니다. pwdReset
사용자에서는 TRUE로 설정되고 정책 pwdMustChange
자체에서는 변수가 TRUE로 설정됩니다.
# John Doe, people, domain.com
dn: cn=John Doe,ou=people,dc=domain,dc=com
cn: John Doe
sn: Doe
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
uid: johndoe
uidNumber: 1003
gidNumber: 1000
homeDirectory: /home/johndoe
loginShell: /bin/bash
userPassword: e1NTSEF9VWFSMDVsSGNIWFMxcnJ5VzBtaWRkOHFmTDE1ai9RYlQ=
pwdReset: TRUE # This attribute only appears if I explicitly request it
# policies, domain.com
dn: ou=policies,dc=domain,dc=com
objectClass: top
objectClass: organizationalUnit
ou: policies
(다음 속성은 cn=default,ou=policies에 속하지만 여기에 뭔가를 쓰지 않으면 어떤 이유로든 표시되지 않습니다)
pwdInHistory: 3
pwdLockout: TRUE
pwdMaxFailure: 3
pwdLockoutDuration: 30
pwdMustChange: TRUE
pwdSafeModify: FALSE
pwdAllowUserChange: TRUE
pwdFailureCountInterval: 0
pwdGraceAuthNLimit: 0
다음은 내 백엔드 및 비밀번호 정책의 구성입니다.
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=domain,dc=com
olcAccess: {0}to attrs=userPassword by self write by * auth
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to attrs=userPKCS12 by self read by * none
olcAccess: {3}to * by * read
olcRootDN: cn=admin,dc=domain,dc=com
olcRootPW: {SSHA}############## omited
olcDbCacheSize: 10000
olcDbCheckpoint: 1024 5
olcDbConfig: {0}set_cachesize 0 15000000 1
olcDbConfig: {1}set_lg_regionmax 262144
olcDbConfig: {2}set_lg_bsize 2097152
olcDbConfig: {3}set_flags DB_LOG_AUTOREMOVE
olcDbConfig: {4}set_lk_max_locks 30000
olcDbConfig: {5}set_lk_max_objects 30000
olcDbIDLcacheSize: 30000
olcDbIndex: objectclass eq
[...more indexes...]
# {0}ppolicy, {1}hdb, config
dn: olcOverlay={0}ppolicy,olcDatabase={1}hdb,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: {0}ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=domain,dc=com
olcPPolicyHashCleartext: TRUE
(다음 두 속성은 {0}ppolicy에도 속합니다)
olcPPolicyUseLockout: FALSE
olcPPolicyForwardUpdates: FALSE
누군가가 이것에 대해 밝힐 수 있기를 바랍니다. 어떤 도움이라도 대단히 감사합니다!
문안 인사
편집하다:
사용자 인증을 방해하는 요소에 대한 통찰력을 얻기 위해 기본 정책을 일부 수정했습니다. pwdMustChange
이 TRUE로 설정되고 pwdReset
또한 TRUE로 설정된 경우(사용자 항목의 이 항목) 'su: 인증 실패' 오류와 함께 사용자 인증이 실패한다는 것을 깨달았습니다 . 그러나 pwdReset
가 TRUE이고 pwdMustChange
FALSE이면 해당 사용자로 원하는 만큼 로그인할 수 있습니다. 나는 이것을 위해 두 개의 변수를 갖는 것이 쓸모없고 직관에 어긋난다고 생각합니다. 대신 단일 변수는 사용자 항목에만 사용해야 합니다( pwdReset
또는 로 호출하려는 항목) pwdMustChange
.
답변1
LDAP 서버의 정책이 반드시 OS 내의 정책과 동일하지는 않습니다. 이 오버레이 속성을 설정하는 프레임워크를 상상하고 있는 것 같습니다.OS비밀번호 변경의 필요성을 인식하게 되지만 보시다시피 작동 방식은 그렇지 않습니다.
운영 체제 내에서 프롬프트를 트리거하려면 회계 모듈(일반적으로 PAM)이 조건을 확인해야 합니다. OpenLDAP의 비밀번호 정책 오버레이는 POSIX 표준이 아닙니다. shadow
정책을 설정하기 위해 사용자의 속성을 조정할 때 발생하는 것과 달리 에서는 pam_unix
설정 중인 이러한 특성을 인식하지 못합니다. OpenLDAP 서버 자체에 대해서도 마찬가지입니다. 이로 인해 사용자가 Linux 서버에 인증할 수 없고 LDAP 서버에서 직접 비밀번호를 변경하기 위한 LDAP에 대한 정보가 충분하지 않기 때문에 사용자 잠금이 발생합니다.
OS 내에서 비밀번호 변경 프롬프트를 실행하려는 경우 이는 해당 작업에 적합한 도구가 아닙니다. 개인적으로 관련 속성을 숙지하고 shadow
, 중앙에서 관리해야 하는 경우 해당 속성을 LDAP에 저장하고, 이를 사용하여 원하는 동작을 트리거하는 것이 좋습니다.
맨페이지 에서 pam_unix(8)
:
계정 구성 요소는 만료, last_change, max_change, min_change,warn_change 섀도우 요소를 기반으로 사용자 계정 및 비밀번호의 상태를 설정하는 작업을 수행합니다. 후자의 경우 사용자에게 비밀번호 변경에 대한 조언을 제공하거나 PAM_AUTHTOKEN_REQD 반환을 통해 사용자가 새 비밀번호를 설정할 때까지 사용자에게 서비스 제공을 연기할 수 있습니다. 위에 나열된 항목은 Shadow(5) 매뉴얼 페이지에 문서화되어 있습니다. 사용자 기록에 이러한 항목이 하나 이상 포함되어 있지 않으면 해당 섀도우 검사가 수행되지 않습니다.