在公司里, 我將Infra也區分為測試及DR環境,測試環境呢,專門拿來測試各種維護或升級的案子,比如AD升級,AD資料維護等等..

其實這在一般小公司是不容易達成的, 一般只有在虛擬環境裡,才有機會達成, 2017年我親力親為獨自協助將該公司內全面導入虛擬化及VLAN,因此可以達成這個目標.

AD的倒回測試分為兩種,一種是由synology business active backup整機VM備份倒回,另一種是使用DC本身的windows backup, 透過目錄還原模式,將AD還原

前一種方式,若要更新測試環境到最新,則需倒回最新的VM備份, 後者則只要在原還原機上,倒回AD的資料即可使測試環境保持與正式環境較新的資料..

於是乎,我便在想,再來測一下第三種方式,那便是使用csvde or ldifde匯入AD資料,再匯入測試環境裡的AD的方式, 只是這個方式還會有一問題, 相信熟悉AD的人應該已經想到,這後面再提.

那麼首先呢,就要確認正式環境與測試環境間的資料差異有多少?

所以我先將正式環境裡的AD使用csvde完整匯出, 在其匯出的所有欄位里,有兩欄位特別有用, 一個是whenCreated, 另一個是whenChanged, 以這個目標來看,whenCreated是我判断的基礎

但這個匯出檔案,並不能直接匯回測試環境,原因是AD雖說是資料庫,但卻不如其它資料庫完整匯入所有欄位資料, 那是因為有些欄位是無法被IMPORT, 它只能由AD系統自動管理,比如objectSid等欄位,以下是一些不能被匯入的欄位訊息..這還不是全部,只是列舉一些

本來我也想的特別美好, 完整匯出,然後完整匯入,完事, 但人生往往不是那麼美好?

那麼再重新匯出一次,只匯出部份欄位的參數是-l, 以下是欄位的列表, 參考自https://dotblogs.com.tw/terrychuang/2011/05/18/25359

如果userAccountControl這一欄位,在匯出後不加以變更為514, 便會出現無法匯入的情況,而錯誤訊息便是如下截圖,無法更新密碼

所以即將要匯入的檔案, 必須將之變更為514, 只要是停用帳戶,執行程式應該便不會檢查密碼欄位

至於useraccountcontrol此欄位的所有可能編碼及說明,可以在這里找到,https://wdmsb.wordpress.com/2014/12/03/descriptions-of-active-directory-useraccountcontrol-value/

我將之整理如下:

緊接著,便可開始import, 於是乎便終於看到成功上傳的回應,以及LOG檔案呈現如下截圖

然後,緊接著的問題便是, 如何批次修正剛才上傳的資料呢?

其實不論是使用csvde or ldifde, 其實好像匯出的資料都不包括密碼欄位, csvde應該也無法處理密碼欄位,這時可能就需要用ldifde來批次修改

一樣的思路, 先匯出全部, 然後只找出需要修正的DN, 按照以下的方法, changetype, replace 加以編輯,再IMPORT變更即可..

以下截圖參考自: https://adamtheautomator.com/csvde/

以上提供的參考URL建議有空仔細看看,挺有幫助..

在使用ldifde 匯出匯入時有幾個重點需注意:

1. -u 參數:

這個參數基本是強迫匯出檔案以UTF-8國際編碼匯出資料, 匯出時DN即可明確顯示中文, 但建議不用使用, 因為依我測試,等一下匯入時使用中文是匯不進的..

不過有趣的地方是,當使用-u參數匯出後,dn是可以看清楚了,不被加密,但其它欄位倒是被加密了…但如果不用, 有些用了-u加密的,它反倒不加密了..

2. 密碼欄位unicodePwd:

這個欄位被要求必須使用base64加密, 而且密碼前後必須加”, 即”你要使用的密碼”, 前後””都必須一起被base64加密,才能成功IMPORT; 只要是經由BASE64加密的欄位,其欄位背後會呈現”::”雙冒號, 若是未加密的便是如DN: ,若是加密的則是DN::

另外只要變更密碼欄位, 就必須使用LDAP SSL加密通道,所以import時要加上-t 636. , 因為走LDAPSSL可能還要加上-b 參數,給定帳密才能順利使用管理員權限匯入

3. 變更的各個欄位間必須加上- , 請看下面截圖範例,在unicodePwd 與userAccountControl間會有 – 來區隔, 這也是我成功上傳的ldif檔案

,

4. BASE64 加密方法:

可別指望網上一堆encode,decode的網頁,我試過, 行不通,所以你只需直接使用WINDOWS 10中的POWERSHELL即可,方法如截圖所示

以下便是使用LDIFDE成功匯入的截圖

其實應該再加上一欄位的控制,pwdLastSet, 這個欄位主要就是強迫用戶下次登入時更換密碼, 只要將之變更為0 即可(PS:零)

最後一個問題便是, 如果要保證正式環境的資料與測試環境的一致, 如果使用這第三種方式的話,關鍵便在於SID是否一致?

以下是檢查SID的指令

要保持一致的關鍵,可能便在於行政作業是否完善了? 即在兩個環境的差異時間內, 依序進行的變更及新增能被正確的紀錄,然後按此方式進行批次新增或修改,那麼必然可以一致.

以上就純就技術範圍能做的,進行了一次技術上的演練

 

By Kevin

發佈留言