LDAP集成Nextcloud 部署
介紹
LDAP是一種輕量目錄訪問協議,可以以樹狀的層次結構存儲數據。常用於信息的集中存放、單點登錄等等。
在實際環境中,Nextcloud往往會與其它應用混合使用,而Nextcloud中的用戶與其它的用戶系統是獨立的,也就需要另行添加一個賬戶,較為繁瑣,也容易出現兩個應用中用戶無法對應的情況,平添了管理的難度。
Nextcloud自帶了LDAP user and group backend插件,可以將LDAP整合至Nextcloud,實現使用LDAP中存儲的用戶信息在Nextcloud上登錄。
安裝LDAP
演示環境
- Ubuntu 16.04
- Nextcloud 12.03
- OpenLDAP
Let's go
首先安裝OpenLDAP
apt-get install slapd ldap-utils
在安裝過程中會提示設置管理員密碼,這個密碼將是cn=admin,dn=example,dn=com的密碼
重新輸入以確認密碼:
完成密碼的設置後,稍等一會,OpenLDAP就安裝好了。
LDAP的配置
現在的LDAP服務暫時無法直接使用,我們需要做一些配置。
編輯/etc/ldap/ldap.conf文件
vim /etc/ldap/ldap.conf
在打開的文件中,將BASE和URI兩行前的註釋去掉,然後在修改BASE後面的內容為:
BASE dc=dreampacific,dc=cn
如果你是第一次接觸LDAP:
``dc=dreampacific``和``dc=cn``是可以自行設置的,以上的示例的dc是根據dreampacific.cn這個域名來設置的。LDAP結構和域名系統類似。
LDAP是一個樹狀的結構,你可以去百度DNS叠代解析的過程,以大概地理解為什麽LDAP的BASE(基礎)有域名的樣子。
URI後面的內容修改為
URI ldap://ldap.dreampacific.cn ldap://ldap-master.dreampacific.cn:666
而下文的URI則是指定ldap的網絡位置,待會要使用這兒設置的URI進行測試,所以這裏要設置可以實際訪問的地址。如果你沒有可用的域名,這兒可以設置為IP地址的形式:
URI ldap://127.0.0.1 ldap://127.0.0.1:666
完成配置文件的修改後,就可以進入下一步了:
dpkg-reconfigure slapd
之後會出現這樣的畫面,選擇“NO”
然後要求你輸入一個域名,這個域名要與之前設置的BASE中dc的內容一致,但要寫成域名的形式:
然後輸入組織機構名稱,最好與前面設置的第一個dc的內容保持一致:
最後輸入之前所設置的管理員密碼:
再確認一遍:
默認選擇MDB:
詢問當ldap卸載時是否移除舊的數據庫,選擇YES或NO均可。
是否移除舊的數據庫,選擇YES
是否允許LDAPv2協議,沒有這個需要就不必啟用了:
現在LDAP的初始配置基本完成了。
測試LDAP服務
使用以下命令測試LDAP服務是否正常運轉:
ldapsearch -x
如果輸出類似以下的內容則為正常:
# extended LDIF # # LDAPv3 # base <dc=dreampacific,dc=cn> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # dreampacific.cn dn: dc=dreampacific,dc=cn objectClass: top objectClass: dcObject objectClass: organization o: dreampacific dc: dreampacific # admin, dreampacific.cn dn: cn=admin,dc=dreampacific,dc=cn objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
到此LDAP的安裝已完成。
LDAP服務的管理
在這兒推薦使用圖形化工具管理LDAP服務,例如phpLDAPadmin。
安裝phpLDAPadmin
phpLDAPadmin是一個可以在網頁上管理LDAP服務的工具。
使用以下命令安裝phpLDAPadmin:
apt-get install phpldapadmin
然後創建一個符號鏈接,將phpldapadmin導入到HTTP服務器的根目錄裏去:
ln -s /usr/share/phpldapadmin/ /var/www/html/phpldapadmin
然後編輯phpldapadmin的配置文件:
vim /etc/phpldapadmin/config.php
1.設置時區
在config.php文件第85行(vim中在普通模式下輸入:set number顯示行號)可以找到有關時區的設置,將它改為你所在的時區(Asia/Shanghai,如果無效可以換成PRC):
$config->custom->appearance['timezone'] = 'Asia/Shanghai';
2.填寫LDAP服務的相關配置
在第274行後面可以依次找到以下幾項配置,將後面的內容按實際情況修改:
//設置服務器名$servers->setValue('server','name','Chengye LDAP Server');//設置服務器地址,可以是域名也可以IP地址$servers->setValue('server','host','127.0.0.1');//LDAP的域名設置,按之前所設置的BASE中的內容填寫$servers->setValue('server','base',array('dc=dreampacific,dc=cn'));//與上面的一樣,按BASE中的內容填寫$servers->setValue('login','bind_id','cn=admin,dc=dreampacific,dc=cn');
完成後保存退出。
最後重啟apache:
service apache2 restart
測試並編輯LDAP中的內容
訪問http://服務器ip/phpldapadmin ,可以看到如下圖所示的界面,點擊左側login登錄:
可以看到默認登錄DN就是我們在config.php中設置的值。輸入之前安裝LDAP時設置的密碼,點擊Authenticate登錄:
然後在左側就可以看到基礎的目錄了,點擊“+”展開:
LDAP暫時先到這裏,接下來我們將工作聚焦到Nextcloud。
Nextcloud上的配置
首先要啟用Nextcloud的LDAP插件(APP),這個插件可以將LDAP中的用戶信息作為登錄信息。直接到應用中啟用這個插件(APP):
也可以使用OCC命令啟用:
sudo -u www-data php occ app:enable user_ldap
啟用後,到管理->LDAP/AD整合,就可以看到與LDAP相關的配置了:
填寫LDAP服務器的信息,示例如下:
(依次點擊“檢測基礎DN”“測試基礎DN”,下方出現“配置完成”則說明連接正常)
添加LDAP信息
這兒所添加的信息均為示例,實際環境中可以有所不同,以滿足不同的需求。
回到LDAP,首先在phpLDAPadmin上創建一個組
組名我們可以設置為NCGroup,然後點擊“Create Object”:
點擊“Commit”以繼續:
OK,一個組就這樣創建完成了。
然後再創建用戶,在NCGroup下,點擊“Create a child entry”:
選擇“Samba: Account”:
輸入基本信息:
註意:在“GID Number”選擇剛剛創建的組;在“Password”中填寫的密碼將用於登錄Nextcloud。
在最下面點擊“Create Object”,然後點擊“Commit”。
完成用戶的創建後,為了滿足Nextcloud的要求,可以再添加一個displayName的Attribute(屬性):
Add new attribute->下拉框中選擇displayName,然後輸入值,這個項將用於在Nextcloud中顯示用戶名,也可用於登錄。
填寫完後拉到下面->Update Object->Update Object完成內容的添加。
完善Nextcloud的配置
回到Nextcloud的 LDAP/AD整合 中,點擊“繼續”,來到用戶的設置。Nextcloud並不會搜索LDAP中存儲的全部用戶,它只會搜索擁有某一或某幾個屬性的用戶。在LDAP中創建的用戶默認擁有inetOrgPerson的屬性,所以我們這裏選擇為默認的inetOrgPerson即可:
點擊“繼續”設置登錄屬性。
這兒的登錄屬性將用於Nextcloud的登錄,在這兒可以設置用戶可以使用LDAP中的屬性登錄,勾選第一條“LDAP/AD用戶名”則使用uid和samaccountname登錄;勾選第二條“LDAP/AD郵箱地址”則使用mailPrimaryAddress和mail屬性登錄。你也可以選擇使用其它的屬性,比如displayName:
點擊“繼續”,在群組的設置中選擇默認即可。
現在的LDAP的配置基本完成了。到Nextcloud的用戶管理頁面中看看是否顯示了LDAP中的用戶:
我們可以看到,LDAP中的用戶“FikGreg”已經顯示了,但是在“用戶名”一欄卻是亂碼一樣的東西。因為LDAP並沒有給Nextcloud提供用以顯示“用戶名”的信息,所以Nextcloud智能用一串隨機字符來代替。
我們只要定義以下哪個屬性可以用來顯示用戶名就可以了。到“專家”->內部用戶名中,設置可以作為“用戶名”的屬性,例如“displayName”。然後點擊“清除用戶-LDAP用戶映射”:
刷新用戶管理頁面,字符串更正成了dispalyName:
測試
最後我們來試試能不能用這個LDAP用戶登錄Nextcloud。
因為我們之前將“dispalyName”作為了登錄屬性,所以這兒用dikplayName的值登錄,密碼為創建用戶時Password的值:
登錄成功!
最後
LDAP和Nextcloud的LDAP插件擁有很大的靈活性,本文只是以示例的形式演示了將LDAP集成進Nextcloud的過程。你完全可以根據實際需要變更一些東西,比如登錄名的屬性,組屬性等等。如果你比較了解LDAP,這不成問題。我會在後面的文章中詳細地介紹這一功能,以及其它的單點登錄的方案。
LDAP集成Nextcloud 部署