無法在使用 ldap auth for samba 的系統上添加本地使用者
嘗試將本地使用者添加到使用 ldap 進行 Samba 身份驗證的 CentOS 6.3 系統,但被使用者在 ldap 中的現有條目所阻礙。
[root@samba ~]# adduser wchandy adduser: user 'wchandy' already exists [root@samba ~]# useradd wchandy useradd: user 'wchandy' already exists
使用者還不是本地使用者:
[root@edgar2 ~]# grep wchandy /etc/passwd
但他們是 ldap 中的 Samba 使用者:
[root@edgar2 ~]# smbldap-usershow wchandy | grep uid dn: uid=wchandy,ou=people,dc=ucsc,dc=edu uid: wchandy uidNumber: 30490
adduser 沒有本地選項。在存在 ldap 身份驗證的情況下,如何讓 adduser 正常工作以添加本地使用者。
其他需要考慮的事項:
- 目前有本地使用者與 ldap 條目(具有不同的 uidNumber)共享一個 uid,他們可以獨立訪問 samba 和 ssh。
- 不,我不想將使用者直接編輯到 /etc/passwd 和 /etc/group 中。我想解決根本問題。另外,本地條目會干擾對 samba 的訪問。
- 不,我不想依賴 ldap 進行本地 ssh 登錄。
- 不,我不想為使用者使用不同的 uid。
我最初使用方便(但似乎不可逆)的 authconfig 命令設置我的 samba-ldap 身份驗證:
[root@samba ~]# authconfig --enableshadow --enablemd5 --enableldap \ --enableldapauth --enableldaptls --enablemkhomedir \ --ldapserver=dir.mydomain.com --ldapbasedn="dc=mydomain,dc=com" \ --enablelocauthorize --updateall
我的 /etc/sysconfig/authconfig 看起來像這樣:
IPADOMAINJOINED=no USEMKHOMEDIR=yes USEPAMACCESS=no CACHECREDENTIALS=yes USESSSDAUTH=no USESHADOW=yes USEWINBIND=no PASSWDALGORITHM=sha512 FORCELEGACY=no USEFPRINTD=yes USEHESIOD=no FORCESMARTCARD=no USEDB=no USELDAPAUTH=yes IPAV2NONTP=no USELDAP=yes USECRACKLIB=yes USEIPAV2=no USEWINBINDAUTH=no USESMARTCARD=no USELOCAUTHORIZE=yes USENIS=no USEKERBEROS=no USESYSNETAUTH=no USESSSD=no USEPASSWDQC=no
我的 samba 配置從 RHEL4.x 系統遷移到 CentOS 6.3。現在,CentOS 6.x 不再使用 nss 和 pam 的笨拙混搭,而誰知道呢,CentOS 6.x 使用了漂亮而簡單的 sssd。
我的 /etc/sssd/sssd.conf 看起來像這樣:
[domain/default] cache_credentials = True #cache_credentials = False ldap_search_base = dc=mydomain,dc=com krb5_realm = EXAMPLE.COM krb5_server = kerberos.example.com id_provider = ldap auth_provider = ldap chpass_provider = ldap ldap_uri = ldap://dir.mydomain.com/ ldap_tls_cacertdir = /etc/openldap/cacerts #ldap_tls_reqcert = allow entry_cache_timeout = 5 debug_level = 31 [sssd] config_file_version = 2 services = nss, pam # SSSD will not start if you do not configure any domains. # Add new domain configurations as [domain/<NAME>] sections, and # then add the list of domains (in the order you want them to be # queried) to the "domains" attribute below and uncomment it. # domains = LDAP domains = default #debug_level = 31 [nss] [pam] debug_level = 31
謝謝您的幫助。如果我能讓我的本地和 samba-ldap 身份驗證獨立工作,我會很興奮。
更新:雖然下面有一些相當充分的解決方法,但這裡是我從 sssd_users 列表中的專家那裡得到的建議的解釋:“是的,它可能在使用 nss 和 pam 的早期作業系統版本中有效,這不是最佳實踐允許共享 UID。使用 sssd 的較新系統可以防止這種情況。” 雖然我的案例完全有效,但我的系統故意阻止了我想做的事情。
但是,我從來沒有找到一種方法來取消或撤銷 authconfig 對我的系統造成的許多更改。所以如果我給 authconfig 的參數是錯誤的,就沒有回頭路了。
這兩種解決方法都不是最佳的,但如果系統管理員發現自己處於 LDAP 和本地密碼文件相互阻塞的棘手情況,它們確實為系統管理員提供了一種前進的方式。
**解決方法 1:**我創建了一個具有不同 UID(使用者名)的本地使用者,以便為已經擁有 LDAP/Samba 條目的人提供 ssh 訪問權限。可能是我多年來做過的最俗氣的系統管理員解決方案。
**解決方法 2:**稍微複雜一點,但歸結為添加具有與 LDAP 中相同的 uidNumber 的本地使用者。
- 使用 getent、ldapsearch 或 smbldap-usershow 查找 LDAP uidNumber
- 暫時禁用 LDAP 中的使用者,以便添加本地使用者而不會發生衝突
- 創建將 uidNumber 與 LDAP 匹配的本地帳戶
- 在 LDAP 中重新啟用使用者
這兩種方法都有效,但都沒有解決允許身份驗證僅將 LDAP 用於 Samba 身份驗證和 /etc/passwd 用於本地身份驗證的根本問題。但是在沒有其他解決方案的情況下,這將不得不這樣做。
我的最後一個答案很糟糕,忽略它。
我相信您唯一的選擇是手動編輯
/etc/passwd
(vipw
是首選,因為它可以使您免於自己的錯誤)。該-o
選項允許您為一個 UID 創建多個名稱,但沒有等效選項可以告訴passwd
在執行 NSS 查找時忽略已經存在的名稱。
getent passwd
添加使用者後,將向您展示 uids 如何級聯;第一個條目獲勝。確保 uid 相同以避免轉移權限的問題。(您的範例不包括-u
語法)