後續要進行computing cluste建置,
另外儲存體將會獨立到NAS上(未來也有可能建立SAN),
統一控管帳號讓使用者可以用同一帳號就登錄到資料中心的所有機器上管理起來會比較方便。
幾個要點:
- synology LDAP server支援OpenLDAP格式。所以Windows的AD(Active directireies)服務沒辦法跑。如果有需要用到windows的LDAP,就要使用synology的另外一項服務"Synology Directory server"。從描述看起來用Synology Directory server的好處很多,但會佔用到DNS server,所以暫時先不考慮。(有些LDAP預設是吃AD格式,例如 Draytek 的router。這些LDAP就無法跟synology的NAS結合)
- synology LDAP server可以跟Open LDAP相容,所以基本上Linux都能跑。
- 測試環境使用的是Ubuntu。在Ubuntu上使用SSSD服務來結合LDAP server設定上會相對簡單。甚至我的經驗是單純使用Ubuntu的LDAP client完全沒辦法跑起來。
Server端
透過Synology的套件管理安裝 LDAP server。安裝以後到 LDAP server 的設定頁面將服務開啟。設定FQDN( fully qualified domain name )為組織的從屬狀態。例如這次實驗室的FQDN為cri.lab,就把該從屬資訊放上去即可。再將 LDAP 登錄密碼填上。
將"控制台" -> "網域/LDAP"打開。設定 LDAP server 連線。基本上 server IP 填寫 127.0.0.1 也可以運作。
設定完畢後,就要進到"編輯"。這邊一些結構上的設定頗重要。"展開巢狀群組"的勾勾一定要拿掉,不然SSSD的服務會認不到。
使用上,Synology對Synology的 LDAP 對接都不會有太大問題。但是到Ubuntu等等的系統問題就會很多。server 端基本上到這邊就完畢了。
Client端
apt install sssd libpam-sss libnss-sss sssd-tools
- 把設定檔放入。因為預設是沒有conf file的,所以還需要手動製造一下。後面權限也要設定為root跟root唯讀:
root:~# touch /etc/sssd/sssd.conf
root:~# chmod 600 /etc/sssd/sssd.conf
root:~# chown root:root /etc/sssd/sssd.confEnable and start the sssd serviceroot:~# systemctl enable sssd
root:~# systemctl start sssd
- 打開 /etc/sssd/sssd.conf ,把以下內容貼上去
[domain/cri.lab]
ldap_tls_reqcert = never
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
sudo_provider = ldap
#IP address of the NAS
ldap_uri = ldap://xxx.xxx.xxx.xxx
#Base DN from our LDAP server configuration.
ldap_search_base=dc=cri,dc=lab
#Bind DN from our LDAP server configuration.
ldap_default_bind_dn = uid=root,cn=users,dc=cri,dc=lab
ldap_default_authtok_type = password
#Password from our LDAP server configuration.
ldap_default_authtok = <myldappassword>
cache_credentials = True
use_fully_qualified_names = False[sssd]
config_file_version = 2
services = nss,pam
#FQDN from LDAP server
domains = cri.lab[nss][pam][sudo]
設定上的幾個要點:
1)讀取的根在[sssd]底下,設定的位置是 domains 。domains後面可以連接很多不同的位置,這邊範例只有 cri.lab ,所以就打上 cri.lab ,sss就會去 [domain/cri.lab] 的 tag 底下找LDAP的server資訊。 其他地方不需要多做修改。
2) 進入到 [domain/cri.lab] 章節內,基本上大多不需要多做修改。只有在 ldap_uri 要改成LDAP server的IP(也就是NAS的IP)。ldap_search_base 改為 dc=cri,dc=lab 。ldap_default_bind_dn 這步可以直接開NAS上的 LDAP server ,最底下有個連線資訊,直接ctrl-c、ctrl-v即可。ldap_default_authtok 就是一開始設定的LDAP連線密碼,記得修改。不過如果對於明碼張貼有疑慮,也可以用加密方式貼上,請參考 sss_obfuscate 指令。
root:~# systemctl enable sssd
root:~# systemctl restart sssd
可以使用 getent passwd xxxx 測試,xxxx就是設定在 LDAP server裡面的帳號。如果有順利連接上就能看到帳號後面的的資訊。
修改完畢後就可以透過LDAP登陸。但這些使用者都不會被系統寫入到/etc/passwd中。也就是這些使用者會缺乏一些設定,例如不會有自己的home。這邊可以自動創建:
root:~# pam-auth-update --enable mkhomedir
ubuntut系統預設都是sh進行登錄。除非有指定特定shell才會進行切換。因為我們在製作Ubuntu帳號的時候,ubuntu的指令會幫忙設定成bash,因此可以省下不少事情。如果透過LDAP 設定就不會有這段。
只能透過修改 LDAP 紀錄的方式。這部分只能在登錄的機器上執行,無法在synology的NAS進行。
這邊的設定就是希望ldap自身的使用者就能修改自己的shell,所以使用者自己就可以做了。不需動到管理者權限。
首先在任意一個地方先創建一個檔名為 changeshell.ldap ,然後編輯它:
dn: uid=testuser,cn=users,dc=cri,dc=lab
changetype: modify
replace: loginShell
loginShell: /bin/bash
uid 就是要更換的帳號。這邊假設是有個帳號叫做 testuser ,要更換成 bash。敲定後就用 ldapmodify 指令進行更換(不需要用到root也可達成):
testuser:~$ ldapmofity -f changeshell.ldap -W -D "uid=root,cn=users,dc=cri,dc=lab"
後面希望LDAP使用者在透過LDAP創建後,就能直接使用到docker。這邊提供兩個方法。
方法1.
就直接把 LDAP 的 user group 放到sudoer中,並且免除使用者輸入密碼(少一次互動在後面佈署CI/CD會比較方便)。LDAP 的群組預設編號是1000001,所以先進入到 /etc/group 創建一個group。這邊只能手動創建,如果使用add group會從目前編號後繼續進行編號,而我們需要指定group的號碼,所以就只能手動處理,無法透過指令:
ldapuser:x:1000001:
接著修改sudo:
root:~# visudo
%#1000001 ALL=(ALL:ALL) NOPASSWD: /usr/bin/docker
注意如果群組名稱就是用%標訂,但是如果用gid加入就是用%#標訂。這樣使用者就能透過 sudo docker run 來跑container了。
方法2.
這邊的使用情境比較類似該docker server上主要都用來跑docker,而且所有user都是透過ldap認證。算是比較髒的作法: 把LDAP的user跟docker group視為同一個group。 上面提及ldap user在ubuntu的sssd預設的user group就是10000001,所以編輯 /etc/group 裡面的 docker:
docker:x:1000001:
這樣只要是透過ldap登錄的user都能使用docker而不用root。
方法3. 修改ldap的加入模式,有人使用ldap登錄後,直接就會被放到docker的group底下,使用者就不需要打sudo
修改/etc/adduser.conf,補上以下內容:
EXTRA_GROUPS="docker"
ADD_EXTRA_GROUPS=1
NOTE
- 使用SSS以後,LDAP在本機上的狀況就不太重要。因為SSS本身就會透過LDAP協定去LDAP server上取用資訊。如果要把LDAP機制關閉,就使用 systemctl stop sssd 指令。
- 使用SSS以後,認證機制是先從系統找使用者,如果有一樣的使用者同時存在系統上與LDAP上,就會優先使用系統上的使用者。但經過測試,密碼使用系統或是LDAP的密碼都可以動作。
references:
- https://stevex0r.medium.com/setup-ldap-with-autofs-on-a-synology-nas-e1dcc835d4f4
- https://community.synology.com/enu/forum/17/post/82944
- https://ubuntu.com/server/docs/service-sssd-ldap
- https://serverfault.com/questions/790577/how-to-change-from-the-default-shell-authenticating-using-sssd-ad