RSS

挖坑文02 (不轻松的)调节exchange用户的地址簿显示—完结

09 Mar

上文因为我的硬盘坏了。用了1天重新调整,现在刚把环境搭建,真的很费时间。希望大家平时做好备份。

接着前面的文档。为了解决GAL的问题,我的思路如下:

1、分配给不同的客户端一个不同的oba

数据库和用户邮箱都可以自定义单独的oba,这个就可以不用开启多个数据库分配不同的oab了。这也证明还是EMS能做的事情多。

2、客户端的gal要不同
3、对aba和gal的访问权限要控制,可以使用Security DistributionGroup来控制访问权限。

基于上面3点,我要来为实现要求对域以及地址簿容器做一些修改。

1-修改 dsHeuristics 值

dsheuristics属性可以设定是否仅有验证用户才能连接到dc上进行LDAP查询。windows 2003 级别的ad默认是只支持验证用户可是进行ldap查询。为了确保我的要求能顺利完成,我要修改该值。

使用adsiedit.msc修改dsHeuristics 的值。

该值默认是空,但是建议修改为001。如果该值非空,仅需修改该值最后一位为1即可。

2-为了方便管理,我在AD中建立了一个名为DEPT的OU,该OU用来放置所有被隔离的部门,位于winos.cashcat/DEPT

3-修改访问All Address Lists Container的权限

查看目前的权限

 

   1: get-adpermission "All Address Lists" | Where {($_.User -like 'NT Authority\Authenticated Users') `
   2: -or ($_.User -like 'Everyone') -or ($_.User -like 'NT Authority\ANONYMOUS LOGON')} `
   3: | FT User,AccessRights,ExtendedRIghts,IsInherited


移除Authenticated Users 的2个权限

   1: get-adpermission "All Address Lists" | Where `
   2: {($_.User -like 'NT Authority\Authenticated Users') `
   3: -and ($_.IsInherited -eq $false)} | Remove-ADPermission

4/删除某人的5个地址簿:

分别运行下列命令

   1: remove-addresslist "All Contacts"
   2: remove-addresslist "All Groups"
   3: remove-addresslist "All Rooms"
   4: remove-addresslist "All Users"
   5: remove-addresslist "Public Folders" 

5-限制对Default Global Address List的访问
当前权限

拒绝Authenticated Users打开Default Global Address List

   1: Get-GlobalAddressList "Default Global Address List" | Add-ADPermission `
   2: -User "Authenticated Users" -AccessRights GenericRead `
   3: -ExtendedRights Open-Address-Book -Deny:$True

 
再次查看当前权限

   1: Get-ADPermission "CN=All Global Address Lists,CN=Address Lists Container,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=com" `
   2: -user "authenticated users"

6-限制对Offline Address Lists Container的访问
禁止Authenticated Users 下载默认Offline Address Lists Container

查看当前权限

   1: remove-adpermission "CN=Offline Address Lists,CN=Address Lists Container,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration, DC=Contoso,DC=com " -user "NT AUTHORITY\Authenticated Users" -ExtendedRights 'ms-Exch-Download-OAB'

 

再次查看当前权限

   1: Get-ADPermission "CN=Offline Address Lists,CN=Address Lists Container,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=com" -user "authenticated users"

7-为所有的Host Group创建一个安全组

实现该安全组下的用户将无法直接列出默认地址簿

创建安全组,名字为AllHostedGroupSG

   1: New-DistributionGroup -Name "All Hosted Groups SG" -OrganizationalUnit "Contoso.com/Companies" -SamAccountName "AllHostedGroupsSG" -Alias "AllHostedGroupsSG" -Type "Security" 
   2:  

 

   1: Add-ADPermission -Identity "CN=Address Lists Container,CN=Contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Contoso,DC=com" -User "All Hosted Groups SG" -AccessRights GenericRead -Deny
   2: Add-ADPermission -Identity "CN=Address Lists Container,CN=Contoso,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=Contoso,DC=com" -User "All Hosted Groups SG" -AccessRights ReadProperty -Properties "Open Address List" –Deny 

——-终于完成的中分线———–

以上就是所有的前期工作了,下一步,我来将进行下一步工作。

创建一个部门OU,实现该部门OU只能查看本部门的地址簿。 

1、创建一个部门OU,account
dsadd ou "ou=account,ou=dept,dc=winos,dc=cashcat"
记得打引号,否则会报错,因为powershell中认为aa,bb表示一个数组。

2、为OU下的用户创建一个安全分发组,并将该组加入AllHostedGroupSG安全组中。

   1: New-DistributionGroup -Name "account SG" -OrganizationalUnit "winos.cashcat/dept/account" -SamAccountName "accountUsersSG" -Alias "accountSG" -Type "Security"
   2: Get-DistributionGroup  -Identity "AllHostedGroupsSG" | Add-DistributionGroupMember -Member "account SG"
   3: Get-DistributionGroupMember "AllHostedGroupsSG" 

 

——————步骤3,4可以用于部门拥有单独邮件域的环境。本文没有涉及这个方面,你可以自己玩玩。
3、创建一个接收域(可选)
New-AcceptedDomain -Name "account" -DomainName "account.com" -DomainType Authoritative -domaincontroller "dc"

4、创建一个E-mail Address Policy (可选)
new-EmailAddressPolicy -Name "account" -IncludedRecipients ‘AllRecipients’ -ConditionalCustomattribute1 "account" -Priority ‘1’ -EnabledEmailAddressTemplates "SMTP:%1g%s@account.com" -domaincontroller "dc"
———–

5、创建部门地址表

   1: get-mailbox -organizationalunit "account" | set-mailbox -
   2: New-AddressList -Name "account AL" -Container '\' -IncludedRecipients 'AllRecipients' -conditionalcustomattribute1 "account" 

 

6、修改部门地址列表权限

   1: Get-AddressList "account AL" | Remove-ADPermission -User "Authenticated Users" -AccessRights genericread -ExtendedRights "open address list" -deny:$false
   2: Get-AddressList "account AL" | Add-ADPermission -User "account SG" -extendedrights "open address list" -deny:$false 

7、创建一个部门级别全球地址簿

   1: New-GlobalAddressList -Name "account GAL" -RecipientFilter {(alias -ne $null -and customattribute1 -eq "account")} 

8、创建一个部门级别New Offline Address Book

   1: new-OfflineAddressBook -Name 'account OAB' -Server 'EX01' -AddressLists '\account AL' -VirtualDirectories 'EX01\OAB (Default Web Site)' 

9、修改部门Offline Address Book的下载权限

因为在准备阶段,我拒绝了所有AllHostedGroupSG组直接下载地址簿的权限,该权限会继承给新建的部门Offline Address Book,这里我得为该部门组添加该权限。

   1: Get-OfflineAddressBook "account OAB" | Add-ADPermission -User 'account SG' -ExtendedRights 'ms-Exch-Download-OAB' -Deny:$false 

10、为用户创建邮箱,并修改其属性 ,添加到部门分发安全组中

我这里直接在EMC中创建了account OU下的4个人的邮箱。

   1: get-mailbox -organizationalunit "account" | set-mailbox -customattribute1 "account" 

   1: get-mailbox -organizationalunit "account" | add-distributiongroupmember -identity "account SG" 

12、修改员工邮箱的离线地址簿为部门地址簿

   1: get-mailbox -organizationalunit "account" | set-mailbox -offlineaddressbook "account OAB" 

13、修改用户的msExchQueryBaseDN属性

 

   1: $user = ([ADSI]"LDAP://DC:389/CN=accounta1,ou=account,ou=dept,DC=winos,DC=cashcat").psbase; $user.Properties["msExchQueryBaseDN"].Value = "ou=account,ou=dept,DC=winos,DC=cashcat"; $user.CommitChanges();
   2: $user = ([ADSI]"LDAP://DC:389/CN=accounta2,ou=account,ou=dept,DC=winos,DC=cashcat").psbase; $user.Properties["msExchQueryBaseDN"].Value = "ou=account,ou=dept,DC=winos,DC=cashcat"; $user.CommitChanges();
   3: $user = ([ADSI]"LDAP://DC:389/CN=accounta3,ou=account,ou=dept,DC=winos,DC=cashcat").psbase; $user.Properties["msExchQueryBaseDN"].Value = "ou=account,ou=dept,DC=winos,DC=cashcat"; $user.CommitChanges();
   4: $user = ([ADSI]"LDAP://DC:389/CN=accounta4,ou=account,ou=dept,DC=winos,DC=cashcat").psbase; $user.Properties["msExchQueryBaseDN"].Value = "ou=account,ou=dept,DC=winos,DC=cashcat"; $user.CommitChanges(); 

由于owa地址簿是直接与GC沟通,查询的时候不会读取我之前设置的安全组权限。如果不加以限制,就会解析出其他部门的员工地址。所以我还得修改一下用户的msExchQueryBaseDN属性,限制他只能查询本OU下的邮件账户(员工邮箱和分发组)

——————————–

行了,到这一步,account OU下的账户隔离工作就完成了。我进owa和outlook来分别查看一下地址簿。

果然现在部门OU用户只能看到自己OU下的邮箱账户了。

————本文到此结束不了————————

有人问了:我靠!你这用户都是建好了的,那后建立的用户怎样才能被地址簿收录呢?

简单,用户邮箱建立按照10-13完成,然后运行下面的脚本

   1: Update-addresslist "account AL"
   2: Update-globaladdresslist "account GAL"
   3: Update-offlineaddressbook "account OAB"
   4: Update-FileDistributionService EX01 -type oab 

————本文到此结束不了————————

有人喊了,我靠,我记忆力差,你不是脚本写的还行么?就不能搞点自动化的给我用么?

好吧,我上传了脚本到skydrive。
默认是自动创建一个叫做aaaa的部门。
默认是自动创建一个叫做first last的邮箱账户。
还有一个删除创建的aaaa部门的exchange相关的设置。

你到这里下载

http://cid-f934535afc3723ba.skydrive.live.com/self.aspx/.Public/test%20related/2-aaaa%20department%20operate.zip

全自动化的,你要是觉得不爽,我那里面已经建好read-host语句了,你稍微修改一下就能搞定了。

————本文到此结束不了————————

有人喊了,你能按照我的环境给一套方案出来么,我这还要实现有些部门能看到所有地址,有些部门看不了所有地址的设置,能给出教程么?

我都给了你走路的能力了,跑还用我教么?当然了,你要是有兴趣把这个坑刨得更深也是不错的。

————本文到此结束了————————

参考文献

http://technet.microsoft.com/en-us/library/bb936719.aspx

Advertisements
 
 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: