Windows域 Active Directory介紹
在今天很多人都有意識或無意識的跟域這個東西打過交道。如果你在公司裡使用電腦,並且你的電腦接入了公司的區域網,那你的電腦很可能就在一個域中。如何檢視你的電腦是否連線到一個域中,以Windows為例,右擊我的電腦 –>屬性,可以看到,我現在使用的這臺電腦就加入了一個域。
域已經成為絕大多數公司組織、連線電腦的一種方式。那麼我們究竟為什麼要使用域?它能給我們帶來什麼好處呢?假設你是公司的系統管理員,你們公司有一千臺電腦。如果你要為每臺電腦設定登入帳戶,設定許可權(比如是否允許登入帳戶安裝軟體),那你要分別坐在這一千臺電腦前工作。如果你要做一些改變,你也要分別在這一千臺電腦上修改。相信沒有哪個管理員想要用這種不吃不喝不睡覺的方式來工作,所以就應運而生了域的概念。
還以Windows為例,在微軟的世界中,一個域是由一個或多個域控制器(domain controller)來控制的(其實域控制器並不神祕,無非就是裝了一些特別軟體的電腦)。其他的電腦加入該域,就要接受域控制器的控制。域控制器中有兩個重要的表,一個是加入該域的電腦的列表,另一個表用來儲存叫做活動目錄(Active Directory)的東西。活動目錄就是你登入公司網路的帳戶。活動目錄中儲存著你的許可權。你在某臺電腦上登入,你鍵入使用者名稱和密碼,你的電腦首先要把你的登入資訊傳送到域控制器,域控制器首先核實你的登入資訊是否正確,然後把一個叫access key的東西返還給你登入的電腦。這個access key中就包含著你的許可權,由它來決定你是否可以安裝軟體,或者使用印表機等等。
有了域以後,作為管理員,你就可以坐在一臺電腦前,登入到域控制器上,對一切許可權進行控制,而不用跑到每臺電腦前進行設定了。工作效率提高了很多,但是還不夠。假設公司有一千名員工,你是否要在域控制器中對這一千個人分別進行許可權的設定呢?這聽起來也是一件很麻煩的事。其實很多員工的許可權都是相同的,那我們可不可以對這些相同的許可權只設置一次,然後將該許可權分配給相關的員工呢?答案就是使用分組(Group)。比如在學校裡,我們設定學生組和教師組。在某臺電腦上我們設定一個共享資料夾,學生組的許可權是不可訪問,而教師組可以對該資料夾進行訪問。我們將不同的使用者放入不同的分組裡,然後對組進行許可權設定,這樣就免去了我們要對每個使用者進行設定的麻煩。比組更大的單位是組織單位(Organization Unit),一個組織單位可以包含使用者,組,資源(電腦,印表機等),還可以包含其他組織單位。舉個簡單的例子,有一個商場中的電腦加入了該商場的域,但是該電腦放置在公共場合,有很大的風險,所以我們可以將該電腦放置在一個單獨的組織單位中,然後對該組織單位進行許可權設定,比如不論誰在該組織單位中登入,都不可以修改他的密碼。
在很多的實際情況中,一個公司又有下面的子公司,所以就造成母公司有一個域,而子公司也有一個單獨的域。母公司的域與子公司的域如何聯絡起來呢?我們可以在它們之間建立一種叫信任(Trust)的關係。如果母公司的帳戶想要能夠登入到子公司的域中,子公司的域就要對母公司的域建立信任關係。當母公司域的帳戶想要登入到子公司域中時,子公司域由於信任母公司的域,所以它會聽從從母公司域的域控制器返回的access key。反過來,由於母公司的域沒有建立對子公司的信任,所以如果子公司的帳戶想要登入到母公司的域中是不可能的。
雖然我們上面的例子都是Windows的域,但域這個概念絕不是微軟獨創的。你也可以在Linux中使用一個叫Samba的軟體來建立域。如果你要用Windows搭建一個域環境的話,要注意兩點:
(1) 加入域不能使用Home版的Windows作業系統(顧名思義它是給你在家用的,而你家裡是不用搭建域的)。
(2) 域控制器不能使用web edition server,因為它沒有安裝活動目錄。
在現實環境中,有很多公司在域中使用多個域控制器,因為如果只使用一個域控制器的話,一旦域控制器不能正常工作,整個域就會癱瘓。在Samba中,Linux使用兩個域控制器,一個是主域控制器,一個是備份域控制器。一旦主域控制器發生故障,備份域控制器就開始工作,直到主域控制器恢復正常。備份域控制器就是一個主域控制器的拷貝,但是它的資料都是隻讀的,也就是說管理員不能在備份域控制器上修改許可權。
在Windows的域中,不使用主域控制器與備份域控制器,每個域控制器充當的都是一樣的角色,比如你有三個域控制器,你可以在任何一個域控制器上對使用者的許可權進行修改,你的修改將被複制到其他兩個域控制器中。同樣,如果一個域控制器發生故障,只要其他的域控制器還能正常工作,整個域還是可以正常執行。
最後再列舉兩條有用的命令:
列舉出域中所有的域控制器: NETDOM QUERY /D:MyDomain DC
檢視你是使用哪個域控制器登入的:echo %logonserver%