1. 程式人生 > >LDAP + Samba 安裝配置流程

LDAP + Samba 安裝配置流程

## LDAP + Samba 安裝配置 書接上文:[LDAP啟動TLS 完整操作流程](https://www.cnblogs.com/shu-sheng/p/14450815.html) 基礎環境:Ubuntu18.04 #### 安裝samba ```shell root@cky:~# apt install samba smbldap-tools -y ``` 檢視版本 ```shell root@cky:~# dpkg -l samba smbldap-tools Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===============================================-============================-============================-=================================================================================================== ii samba 2:4.7.6+dfsg~ubuntu-0ubuntu2 amd64 SMB/CIFS file, print, and login server for Unix ii smbldap-tools 0.9.9-1ubuntu3 all Scripts to manage Unix and Samba accounts stored on LDAP ``` #### 新增 LDAP 的 Samba 配置 為了將OpenLDAP用作Samba的後端,DIT將需要使用可以正確描述Samba資料的屬性。可以通過引入Samba LDAP模式獲得此類屬性。 該模式位於現在安裝的samba軟體包中,並且已經採用ldif格式。 拷貝`samba.schema` 和` samba.ldif` 找不到`samba.schema`,從原始碼搞了一份(`git clone https://github.com/samba-team/samba.git`) ```shell cp /usr/share/doc/samba/examples/LDAP/samba.ldif.gz /etc/ldap/schema cp /root/cky/samba/samba-4.7.6+dfsg~ubuntu/examples/LDAP/samba.schema /etc/ldap/schema/ root@cky:/etc/ldap/schema# pwd /etc/ldap/schema root@cky:/etc/ldap/schema# gzip -d samba.ldif.gz ``` 匯入: ```shell root@cky:/etc/ldap/schema# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f samba.ldif adding new entry "cn=samba,cn=schema,cn=config" ``` 要查詢和檢視此新架構: ```shell ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config 'cn=*samba*' ``` 既然slapd知道了Samba屬性,我們就可以基於它們建立一些索引。索引條目是客戶端對DIT執行篩選搜尋時提高效能的一種方法。 建立`samba_indices.ldif`具有以下內容的檔案: ```shell root@cky:~/ldap# pwd /root/ldap root@cky:~/ldap# cat samba_indices.ldif dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcDbIndex olcDbIndex: objectClass eq olcDbIndex: uidNumber,gidNumber eq olcDbIndex: loginShell eq olcDbIndex: uid,cn eq,sub olcDbIndex: memberUid eq,sub olcDbIndex: member,uniqueMember eq olcDbIndex: sambaSID eq olcDbIndex: sambaPrimaryGroupSID eq olcDbIndex: sambaGroupType eq olcDbIndex: sambaSIDList eq olcDbIndex: sambaDomainName eq olcDbIndex: default sub,eq ``` 使用`ldapmodify`實用程式載入新索引: ```shell root@cky:~/ldap# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f samba_indices.ldif modifying entry "olcDatabase={1}mdb,cn=config" ``` 如果正常到現在,可以使用`ldapsearch`檢視到新索引: ```shell root@cky:~/ldap# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase={1}mdb olcDbIndex dn: olcDatabase={1}mdb,cn=config olcDbIndex: objectClass eq olcDbIndex: uidNumber,gidNumber eq olcDbIndex: loginShell eq olcDbIndex: uid,cn eq,sub olcDbIndex: memberUid eq,sub olcDbIndex: member,uniqueMember eq olcDbIndex: sambaSID eq olcDbIndex: sambaPrimaryGroupSID eq olcDbIndex: sambaGroupType eq olcDbIndex: sambaSIDList eq olcDbIndex: sambaDomainName eq olcDbIndex: default sub,eq ``` #### 新增Samba LDAP物件 接下來,配置smbldap-tools軟體包以匹配您的環境。該軟體包帶有一個名為*smbldap-config*的配置幫助程式指令碼。但是,在執行它之前,您應該確定以下兩個重要的配置設定`/etc/samba/smb.conf`: - *netbios名稱*:該伺服器的名稱。預設值從伺服器的主機名派生,但被截斷為15個字元。 - *workgroup*:此伺服器的工作組名稱,或者,如果以後決定將其設定為域控制器,則為該域。 #### 配置samba ```ini # file : /etc/samba/smb.conf [global] workgroup = Company server string = Samba Server Version %v log file = /var/log/samba/log.%m security = user passdb backend = ldapsam:ldap://company02.com ldap suffix = dc=company,dc=com ldap user suffix = ou=Dev ldap group suffix = ou=Group ldap machine suffix = ou=Computers ldap idmap suffix = ou=Idmap ldap admin dn = cn=admin,dc=company,dc=com ldap ssl = start tls ldap passwd sync = yes ``` > Note: ubuntu官方文件的 ldap ssl = start tls > > 但是設定該項後重啟服務報ERROR:Failed to issue the StartTLS instruction: Protocol error 測試一下`samba`配置檔案 ```shell root@cky:~/ldap# testparm -s ``` 通過執行配置指令碼來繼續生成*smbldap-tools*配置 ```shell root@cky:~/ldap# smbldap-config # 只有這三項進行了輸入操作,別的都是直接回車 netbios name [] > Company ldap master bind password [] > 654321 ldap slave bind password [] > 654321 ``` 使用`smbldap-populate`新增Samba所需的LDAP物件。它將詢問您“域根”使用者的密碼,該使用者也是LDAP中儲存的“根”使用者: ```shell root@cky:~# smbldap-populate -g 10003 -u 10003 -r 10003 Populating LDAP directory for domain Company (S-1-5-21-385293779-2563394074-3374145406) (using builtin directory structure) entry dc=company,dc=com already exist. entry ou=Dev,dc=company,dc=com already exist. entry ou=Groups,dc=company,dc=com already exist. adding new entry: ou=Computers,dc=company,dc=com adding new entry: ou=Idmap,dc=company,dc=com adding new entry: sambaDomainName=Company,dc=company,dc=com adding new entry: uid=root,ou=Dev,dc=company,dc=com adding new entry: uid=nobody,ou=Dev,dc=company,dc=com adding new entry: cn=Domain Admins,ou=Groups,dc=company,dc=com adding new entry: cn=Domain Users,ou=Groups,dc=company,dc=com adding new entry: cn=Domain Guests,ou=Groups,dc=company,dc=com adding new entry: cn=Domain Computers,ou=Groups,dc=company,dc=com adding new entry: cn=Administrators,ou=Groups,dc=company,dc=com adding new entry: cn=Account Operators,ou=Groups,dc=company,dc=com adding new entry: cn=Print Operators,ou=Groups,dc=company,dc=com adding new entry: cn=Backup Operators,ou=Groups,dc=company,dc=com adding new entry: cn=Replicators,ou=Groups,dc=company,dc=com Please provide a password for the domain root: Changing UNIX and samba passwords for root New password: 654321 Retype new password: 654321 New passwords don't match! ``` 將rootDN使用者的密碼(在slapd軟體包的安裝過程中設定的密碼)告知Samba: ```shell root@cky:~# smbpasswd -W Setting stored password for "cn=admin,dc=company,dc=com" in secrets.tdb New SMB password: 654321 Retype new SMB password: 654321 ``` #### SSSD配置 為了讓LDAP使用者能夠連線到samba並進行身份驗證的最後一步,現在需要這些使用者也以“ unix”使用者身份出現在系統中。 安裝`sssd-ldap` ```shell root@cky:~# apt -y install sssd-ldap ``` 配置`/etc/sssd/sssd.conf` ```ini [sssd] config_file_version = 2 domains = Company [domain/Company] id_provider = ldap auth_provider = ldap ldap_uri = ldap://192.168.3.188 cache_credentials = True ldap_search_base = dc=company,dc=com ``` 調整許可權並啟動服務 ```shell root@cky:~# chmod 0600 /etc/sssd/sssd.conf root@cky:~# chown root:root /etc/sssd/sssd.conf root@cky:~# systemctl restart sssd ``` 重新啟動Samba服務: ```shell root@cky:~# systemctl restart smbd.service nmbd.service ``` 要快速測試設定,檢視getent是否可以列出Samba組: ```shell root@cky:~# getent group Replicators root@cky:~# ``` 有問題,查詢不到使用者組???一個大坑 還是認證有問題,系統中`ldap`的使用者查不到 google+百度 良久,外帶犧牲了8根秀髮,經過N多嘗試之後,我發現以下方法即可解決: 修改配置檔案`/etc/nsswitch.conf` ``` passwd: compat systemd sss ldap db group: compat systemd sss ldap db shadow: compat sss ldap db ``` 主要就是這三項後面加了 `ldap`和 `db` 安裝`nslcd` ```shell root@cky:~# apt install nslcd -y ``` 修改配置檔案`/etc/nslcd.conf` ```shell root@cky:~# grep -Ev '^$|^[#;]' /etc/nslcd.conf uid nslcd gid nslcd uri ldapi:///192.168.3.188 base dc=company,dc=com ldap_version 3 binddn cn=admin,dc=company,dc=com bindpw 654321 ssl off tls_cacertfile /etc/ssl/certs/ca-certificates.crt ``` 重啟`nslcd`服務 ```shell root@cky:~# systemctl restart nslcd root@cky:~# systemctl enable nslcd nslcd.service is not a native service, redirecting to systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable nslcd ``` 重啟`slapd`服務 ```shell root@cky:~# systemctl restart slapd ``` 再次查詢 ```shell root@cky:~# getent group Replicators Replicators:*:552: ``` 所以我也不知道是我看的不夠全,還是官方文件的缺失,此處再次diss一下[Ubuntu官方文件](https://ubuntu.com/server/docs/samba-openldap-backend) #### 使用`smbldap-tools`管理使用者、組和計算機賬戶 啟用自動主目錄建立: ```shell root@cky:~# pam-auth-update --enable mkhomedir ``` 要新增具有主目錄的新使用者: ```shell root@cky:~# smbldap-useradd -a -P -m ldap_user01 Changing UNIX and samba passwords for ldap_user01 New password: 111111 Retype new password: 111111 ``` 查一下`ldap`中的使用者 ```shell root@cky:~# ldapsearch -x -b "uid=ldap_user01,ou=Dev,dc=company,dc=com" ``` 看一下`home`目錄 ```shell root@cky:~# ls /home cky ldap_user01 ``` 使用`getent`查詢一下使用者 ```shell root@cky:~# getent passwd ldap_user01 ldap_user01:x:10003:513:System User:/home/ldap_user01:/bin/ba