Environment info:
AD on win 2k8r2
Ubuntu 12.04.5 LTS
SSSD v1.8.6
everything is in the same vlan
UbuntuサーバーでLDAP/SSSDソリューションを使用しています。認証プロセスは正常に動作します。つまり、ユーザーは正常にログインし、必要なことは何でもできます。
誰かがパスワードを変更しようとすると、次のように表示されます。
user@Host:~$ passwd
Current Password:
New Password:
Reenter new Password:
Password change failed.
passwd: Authentication token manipulation error
passwd: password unchanged
新しいパスワードはすべてのAD要件を満たしています。
/var/log/auth.logにこれが表示されます。
Aug 18 15:22:12 hostname passwd[7544]: pam_unix(passwd:chauthtok): user "user" does not exist in /etc/passwd
Aug 18 15:22:16 hostname passwd[7544]: pam_unix(passwd:chauthtok): user "user" does not exist in /etc/passwd
Aug 18 15:22:21 hostname passwd[7544]: pam_sss(passwd:chauthtok): system info: [Generic error (see e-text)]
Aug 18 15:22:21 hostname passwd[7544]: pam_sss(passwd:chauthtok): User info message: Password change failed.
Aug 18 15:22:21 hostname passwd[7544]: pam_sss(passwd:chauthtok): Password change failed for user user: 20 (Authentication token manipulation error)
Ldap_default_bind_dnのsssd.confでいくつかの異なる設定を使用してみました。これらの設定はすべて、ユーザーは認証できますが、パスワードは変更できません。何がそれを止めているのか分かりません-それは単に設定を変更する必要があるように感じ、それはすべてうまくいくでしょうが、何を変更する必要があるかはわかりません。
構成ファイル:
/etc/sssd/sssd.conf
[sssd]
config_file_version = 2
domains = LDAP
services = nss, pam
debug_level = 10
[nss]
[pam]
[domain/LDAP]
enumerate = false
id_provider = ldap
#ldap_access_filter = memberOf=cn=XXXX,cn=XXXX,dc=XXXX,dc=XXXX
ldap_uri = ldap://xxx.xxx.xxx.xxx # AD server ip
ldap_search_base = ou=XXXX,dc=XXXX,dc=XXXX
ldap_tls_reqcert = demand
ldap_id_use_start_tls = false
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
ldap_schema = rfc2307bis
ldap_user_object_class = person
ldap_group_object_class = group
ldap_default_bind_dn = cn=XXXX,cn=XXXX,dc=XXXX,dc=XXXX
ldap_default_authtok_type = password
ldap_default_authtok = *********
ldap_user_gecos = displayName
ldap_user_home_directory = unixHomeDirectory
min_id = 10000
ldap_user_principal = userPrincipalName
ldap_force_upper_case_realm = True
auth_provider = krb5
chpass_provider = krb5
krb5_server = xxx.xxx.xxx.xxx # AD server ip
krb5_kpasswd = xxx.xxx.xxx.xxx # AD Server ip
krb5_realm = XXXX.XXXX #Upper caseof the domain
krb5_changepw_principle = kadmin/changepw
krb5_auth_timeout = 15
krb5_store_password_if_offline = true
krb5_renewable_lifetime = 14d
krb5_renew_interval = 60
debug_level = 9
/etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = XXXX.XXXX # capitalised domain
realm = XXXX.XXXX # capitalised domain
dns_lookup_realm = true
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
default_etypes = arcfour-hmac-md5
default_etypes_des = des-cbc-crc
default_tkt_enctypes = arcfour-hmac-md5
default_tgs_enctypes = arcfour-hmac-md5
[realms]
XXXX.XXXX= {
kdc = xxx.xxx.xxx.xxx:88 # AD Server IP
kpasswd_server = xxx.xxx.xxx.xxx:464 #AD server IP
default_domain = XXXX.XXXX # Capitalised domain
}
[domain_realm]
.xxxx.xxxx = XXXX.XXXX # lower = CAP domain
xxxx.xxxx = XXXX.XXXX
/etc/pam.d/common-password:
password [success=2 default=ignore] pam_unix.so obscure sha512
password sufficient pam_sss.so
password requisite pam_deny.so
password required pam_permit.so
多くの研究とテストの後。ユーザーがldap [バックエンド]でSSSDを使用している場合、ユーザーがpasswd
関数を使用してパスワードを変更できるようにするための答えは次のとおりです。 sshを介してSSSDクライアントへのパスワードで実際に認証できる場合、パスワードを変更する問題は、「passwd:認証トークン操作エラー」がLDAP ACLから発生します。 userPassword属性への自己書き込みアクセスが必要
Olcを使用する場合、ldap構成ファイルに次を追加します。編集olcDatabase={2}bdb.ldif olcAccess
:
{0}to attrs=userPassword,shadowLastChange by self write by anonymous
auth by dn="cn=Manager,dc=domain.com" write by * none
必要な他の属性の読み取りと書き込みを許可するために、さらにいくつか追加してください。
olcAccess: {2}to * by * read by users read by anonymous auth
すべてのユーザーに対して一度だけ行う必要があります。 {0}to attrs=userPassword
...上にリストしたとおりに、LDAPサーバーにACLとして適用され、グローバルに適用されます。 olcDatabase={2}bdb.ldif olcAccess
を手動で編集する場合、CRCを変更する必要がありますが、それには多くのreadmeがあるので簡単です。
他のユーザーは、クライアント上のバインド資格情報の変更を投稿しました/etc/sssd/sssd.conf
このように:
ldap_default_bind_dn = cn=Manager,dc=mydomain,dc=fqdn.com ldap_default_authtok_type = password ldap_default_auttok = secret
/etc/sssd/sssd.conf
バインド資格情報の変更は機能しませんでしたが、ユーザーがuserPassword属性を自己記述できるようにしました...必ずしもこれが必要なわけではありませんが、SSSDおよびLDAPバックエンドでLinuxクライアントでpasswd関数を使用するためにそれが必要。
以下を/etc/sssd/sssd.confに追加します。
[domain/LDAP]
...
# changing passwords not working otherwise
# see https://fedorahosted.org/sssd/ticket/2204
krb5_use_enterprise_principal = false
一定。
それはsssd.confのldapへのバインドに関係していました。一時的な回避策として、管理者ユーザー/パスを使用しました。passwdを使用してパスワードを変更できます。私はADについて何も知らないので、それについてもっと遊びますが、少なくとも問題はバインドユーザーの許可にあることを知っています。