專用密碼策略會定義於 pwdPolicy(5dsoc) 項目中。您可以在目錄樹狀結構的任何位置定義策略,通常會在以策略決定的帳號複寫之子樹狀結構中。該策略具有格式為 cn=policy name,subtree 的 DN。
定義密碼策略之後,可以在想要的使用者項目中設定 pwdPolicySubentry(5dsat) 屬性,以指定密碼策略。
本節包含下列主題:
目錄伺服器可讓您配置多個密碼策略。本節說明預設密碼策略與專用密碼策略。本節亦會說明當多個密碼策略可套用到指定的帳號時,將強制執行的策略。
第一次建立目錄伺服器實例時,該實例會有預設密碼策略。預設密碼策略會顯示在配置項目 cn=PasswordPolicy,cn=config 中。預設密碼策略會套用到目錄中除目錄管理員以外的所有帳號。
如同在所有目錄伺服器密碼策略中一般,cn=PasswordPolicy,cn=config 具有物件類別 pwdPolicy(5dsoc) 和物件類別 sunPwdPolicy(5dsoc)。
建立目錄伺服器實例時,密碼策略屬性會保留在 Directory Server 5 相容模式中,以從舊版本升級。在 Directory Server 5 相容模式中,目錄伺服器也會處理具有物件類別 passwordPolicy(5dsoc) 的密碼策略項目。
升級完成後,可以如「Sun Java System Directory Server Enterprise Edition 6.1 Migration Guide」中所述,以完整功能模式使用新密碼策略。目錄應用程式不會感覺到管理動作的進行。
本章包含使用新密碼策略功能的密碼策略配置。
您可以變更預設密碼策略以覆寫預設設定。您可以使用 dsconf(1M) 指令設定預設密碼策略的伺服器特性。這類伺服器特性名稱一般會以 pwd- 前綴為開頭。變更這類特性的設定時,會覆寫該實例的預設密碼策略。但是,複寫不會複製對複本所做的變更。對預設密碼策略所做的變更是實例配置的一部分,而不是目錄資料的一部分。
除了配置預設密碼策略之外,您還可以配置專用密碼策略。專用密碼策略會由目錄樹狀結構中的項目所定義。專用密碼策略項目會有與預設密碼策略相同的物件類別 pwdPolicy(5dsoc),因此會有相同的策略屬性。由於專用密碼策略為標準目錄項目,策略項目會以標準目錄項目相同的方式進行複寫。
使用者項目透過作業屬性 pwdPolicySubentry(5dsat) 的值參照專用密碼策略。使用者項目參照專用密碼策略時,該策略會覆寫實例的預設密碼策略。在許多部署中,您需要指定使用者角色。您可以設定 pwdPolicySubentry 值配置角色與服務類別 (CoS) 搭配使用,以決定套用到使用者帳號的密碼策略。若要覆寫某個角色所設定的密碼策略,請直接變更使用者項目上的 pwdPolicySubentry 值。
總結本節,一開始會套用預設密碼策略。您可以變更預設密碼策略以覆寫預設值。接著,您可以建立專用密碼策略項目以覆寫預設密碼策略。以角色與 CoS 指定密碼策略時,可以指定個別項目的密碼策略以覆寫 CoS 指定的策略。
建立與修改專用密碼策略的方式與建立及修改任何其他目錄項目的方式相同。下列程序示範如何使用文字編輯器在 LDIF 中寫入密碼策略項目。接著,您可以使用 ldapmodify 指令與 -a 選項,將密碼策略項目增加至目錄中。
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
除非另外指定,否則此處顯示的資料範例來自於 Example.ldif。
為要建立的密碼策略完成密碼策略工作表。
如需範例,請參閱定義密碼策略的工作表。
在以工作表為基礎的 LDIF 中寫入密碼策略項目。
例如,下列策略項目會指定 Example.com 臨時員工的密碼策略,該員工的子樹狀結構根目錄為 dc=example,dc=com:
dn: cn=TempPolicy,dc=example,dc=com objectClass: top objectClass: pwdPolicy objectClass: sunPwdPolicy objectClass: LDAPsubentry cn: TempPolicy pwdAttribute: userPassword pwdCheckQuality: 2 pwdLockout: TRUE pwdLockoutDuration: 300 pwdMaxFailure: 3 pwdMustChange: TRUE
除了預設密碼策略設定之外,此處顯示的策略還會指定其他運作方式,同時會強制執行密碼品質檢查。帳號會在三次連續連結失敗之後鎖定五分鐘 (300 秒)。重設密碼之後必須變更密碼。指定策略給使用者帳號之後,此處明確指定的設定會覆寫預設密碼策略。
將密碼策略項目增加至目錄中。
例如,下列指令會增加 dc=example,dc=com 下 Example.com 臨時員工的密碼策略。密碼策略已儲存在名為 pwp.ldif 的檔案中。
$ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif Enter bind password: adding new entry cn=TempPolicy,dc=example,dc=com $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w --b dc=example,dc=com \ "(&(objectclass=ldapsubentry)(cn=temppolicy))" Enter bind password: version: 1 dn: cn=TempPolicy,dc=example,dc=com objectClass: top objectClass: pwdPolicy objectClass: LDAPsubentry cn: TempPolicy pwdCheckQuality: 2 pwdLockout: TRUE pwdLockoutDuration: 300 pwdMaxFailure: 3 pwdMustChange: TRUE $ |
如 Example.ldif 中所示,kvaughan 是人力資源部門的經理,具有修改 dc=example,dc=com 項目的存取權。Vaughan 的連結密碼如 Example.ldif 中所示,為 bribery。
若要定義您所定義的策略決定之使用者帳號,請參閱指定密碼策略給個別帳號或使用角色與 CoS 指定密碼策略。
本程序會指定現有的密碼策略給單一使用者帳號。
若要完成此程序,必須有可指定的專用密碼策略。請參閱建立密碼策略。
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
除非另外指定,否則此處顯示的資料範例來自於 Example.ldif。
將密碼策略 DN 增加至使用者項目之 pwdPolicySubentry 屬性的值。
例如,下列指令會指定在建立密碼策略中定義的密碼策略給 DN 為 uid=dmiller,ou=people,dc=example,dc=com 的 David Miller 項目:
$ cat pwp.ldif dn: uid=dmiller,ou=people,dc=example,dc=com changetype: modify add: pwdPolicySubentry pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com $ ldapmodify -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif Enter bind password: modifying entry uid=dmiller,ou=people,dc=example,dc=com $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - -b dc=example,dc=com \ "(uid=dmiller)" pwdPolicySubentry Enter bind password: version: 1 dn: uid=dmiller, ou=People, dc=example,dc=com pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com $ |
如 Example.ldif 中所示,kvaughan 是人力資源部門的經理,具有修改 dc=example,dc=com 項目的存取權。Vaughan 的連結密碼如 Example.ldif 中所示,為 bribery。
本程序經由套用角色與服務類別 (CoS),指定現有的專用密碼策略給一組使用者。如需角色與 CoS 的詳細資訊,請參閱第 9 章, 目錄伺服器群組、角色與 CoS。
若要完成此程序,必須有可指定的專用密碼策略。請參閱建立密碼策略。
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
除非另外指定,否則此處顯示的資料範例來自於 Example.ldif。
建立要由密碼策略所決定的項目角色。
例如,下列指令會為 Example.com 的臨時員工建立篩選的角色:
$ cat tmp.ldif dn: cn=TempFilter,ou=people,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsFilteredRoleDefinition cn: TempFilter nsRoleFilter: (&(objectclass=person)(status=contractor)) description: filtered role for temporary employees $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f tmp.ldif Enter bind password: modifying entry cn=TempFilter,ou=people,dc=example,dc=com $ |
如 Example.ldif 中所示,kvaughan 是人力資源部門的經理,具有修改 dc=example,dc=com 項目的存取權。Vaughan 的連結密碼如 Example.ldif 中所示,為 bribery。
建立服務類別以產生密碼策略項目的 DN。
DN 為具有您所建立的角色之使用者的 pwdPolicySubentry 屬性值。
例如,下列指令會為 Example.com 的臨時員工建立篩選的角色。該指令會指定 cn=TempPolicy,dc=example,dc=com 給具有該角色的使用者。
$ cat cos.ldif dn: cn=PolTempl,dc=example,dc=com objectclass: top objectclass: nsContainer dn: cn="cn=TempFilter,ou=people,dc=example,dc=com", cn=PolTempl,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: LDAPsubentry objectclass: costemplate cosPriority: 1 pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com dn: cn=PolCoS,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: cosSuperDefinition objectclass: cosClassicDefinition cosTemplateDN: cn=PolTempl,dc=example,dc=com cosSpecifier: nsRole cosAttribute: pwdPolicySubentry operational $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f cos.ldif Enter bind password: modifying entry cn=TempFilter,ou=people,dc=example,dc=com $ |
狀態為 contractor 的使用者現在變成遵循密碼策略 cn=TempPolicy,dc=example,dc=com。
在許多部署中,新帳號所套用的密碼策略會與已建立的帳號所套用的密碼策略不同。本節示範第一次登入密碼策略。該策略提供使用者三天試用新建立的帳號並設定新密碼,之後才會鎖定帳號。該策略執行方式對重設密碼的使用者而言也相同。
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
建立新建立帳號的專用密碼策略。
例如,增加設定過期時間為三天 (259,200 秒) 的密碼策略項目。此密碼策略的 pwdMustChange(5dsat) 也會設為 TRUE,表示使用者第一次連結時必須變更密碼。
$ cat firstLogin.ldif dn: cn=First Login,dc=example,dc=com objectClass: top objectClass: LDAPsubentry objectClass: pwdPolicy objectClass: sunPwdPolicy cn: First Login passwordStorageScheme: SSHA pwdAttribute: userPassword pwdInHistory: 0 pwdExpireWarning: 86400 pwdLockout: TRUE pwdMinLength: 6 pwdMaxFailure: 3 pwdMaxAge: 259200 pwdFailureCountInterval: 600 pwdAllowUserChange: TRUE pwdLockoutDuration: 3600 pwdMinAge: 0 pwdCheckQuality: 2 pwdMustChange: TRUE $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f firstLogin.ldif Enter bind password: adding new entry cn=First Login,dc=example,dc=com $ |
建立包含所有新建立帳號的角色。
建立此角色會設定一些區分新建立的帳號與已建立的帳號之方式。
將新帳號定義為 pwdReset(5dsat) 屬性設為 TRUE 的帳號。
若是密碼管理員等其他使用者變更使用者密碼時,pwdReset 會設為 TRUE。
建立識別新帳號的角色。
例如,下列指令會建立已重設密碼的帳號角色。
$ cat newRole.ldif dn: cn=First Login Role,ou=people,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsFilteredRoleDefinition cn: First Login Role nsRoleFilter: (pwdReset=TRUE) description: Role to assign password policy for new and reset accounts $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f newRole.ldif Enter bind password: adding new entry cn=First Login Role,ou=people,dc=example,dc=com $ |
使用服務類別指定新建立帳號的密碼策略。
$ cat newCoS.ldif dn: cn=First Login Template,dc=example,dc=com objectClass: top objectClass: nsContainer dn: cn="cn=First Login Role,ou=people,dc=example,dc=com", cn=First Login Template,dc=example,dc=com objectClass: top objectClass: extensibleObject objectClass: LDAPSubEntry objectClass: CoSTemplate cosPriority: 1 pwdPolicySubentry: cn=First Login,dc=example,dc=com dn: cn=First Login CoS,dc=example,dc=com objectClass: top objectClass: LDAPSubEntry objectClass: CoSSuperDefinition objectClass: CoSClassicDefinition cosTemplateDN: cn=First Login Template,dc=example,dc=com cosSpecifier: nsRole cosAttribute: pwdPolicySubentry operational $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -f newCoS.ldif Enter bind password: adding new entry cn=First Login Template,dc=example,dc=com adding new entry cn="cn=First Login Role,ou=people,dc=example,dc=com", cn=First Login Template,dc=example,dc=com adding new entry cn=First Login CoS,dc=example,dc=com $ |
增加符合已增加的角色之新使用者。增加使用者以驗證新使用者遵循新密碼策略,而現有使用者則不用。
$ cat quentin.ldif dn: uid=qcubbins,ou=People,dc=example,dc=com objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson uid: qcubbins givenName: Quentin sn: Cubbins cn: Quentin Cubbins mail: quentin.cubbins@example.com userPassword: ch4ngeM3! description: New account $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f quentin.ldif Enter bind password: adding new entry uid=qcubbins,ou=People,dc=example,dc=com $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - \ -b dc=example,dc=com uid=qcubbins nsrole pwdPolicySubentry Enter bind password: version: 1 dn: uid=qcubbins,ou=People,dc=example,dc=com nsrole: cn=first login role,ou=people,dc=example,dc=com pwdPolicySubentry: cn=First Login,dc=example,dc=com $ ldapsearch -b dc=example,dc=com uid=bjensen nsrole pwdPolicySubentry version: 1 dn: uid=bjensen, ou=People, dc=example,dc=com $ |
請注意,Barbara Jensen 的現有帳號由預設密碼策略所決定。但是,Quentin Cubbins 的新帳號則是由您定義的密碼策略所決定。