Так как я в последнее время занимаюсь различными задачами по делегированию полномочий, то приходится припоминать кое-какие хорошо забытые “базовые” вещи. На самом деле мне пришлось дважды воткнуться в проблему исчезнувших атрибутов, чтобы заняться ей всерьёз и обнаружить повторно, что понятие “filtered attributes” может относиться не только к RODC =)
Итак, ситуация обычно выглядит следующим образом: Вы пытаетесь делегировать полномочия на атрибут объекта в AD с помощью мастера делегирования и обнаруживаете, что это невозможно, поскольку он (атрибут) в мастере не виден. Не виден он так же и во вкладке Безопасность свойств объекта. Например, если я попытаюсь делегировать полномочия на изменение атрибута employeeID для контактов, мастер покажет мне следующее окно:
Как видно, здесь нет такого атрибута, как employeeID. Где он? Ну, это достаточно просто: многие атрибуты фильтруются из представления мастера (и не только). Это сделано, чтобы облегчить нам работу, так как существует множество свойств объектов, которые обычно просто не нужны (т.е. нет нужды их редактировать, конечно). “Но… Мне нужно делегировать полномочия на эти свойства!”,- скажете мне Вы. Отлично, никаких проблем: давайте вернем наши атрибуты на подобающее им место. Чтобы осуществить это, нам нужно внести некоторые измениния в файл dssec.dat, расположенный в папке %systemroot%\system32 (резервная копия не должна пригодиться, но должна быть сделана ). Файл имеет вполне очевидную структуру: одна секция на каждый тип объекта, начинающаяся с [<attributename>] и заканчивающаяся с началом следующей секции. Например, секция для контактов будет выглядеть как-то так:
Из скриншота видно, что секция состоит из названий отфильтрованных атрибутов, знака “=” и числа. В красном прямоугольнике мы видим тот самый атрибут, который мы не можем видеть в мастере. Почему? Ну очевидно же, что из-за этой мерзкой цифры 7. Что бы нам такого туда поместить вместо нее? Вариантов немного:
- Чтобы отобразить оба варианта read & write, поставим туда 0
- Чтобы отобразить вариант write, используйте 1
- 2 даст доступ к опции read
- ну и оставьте там 7, чтобы убрать свойство из мастера целиком.
так что давайте поставим строку “employeeID=0”:
перезапустим нашу консоль ADUC и снова запустим мастер делегирования:
Voilà!
Дополнительное чтиво:
http://support.microsoft.com/kb/296490
http://technet.microsoft.com/en-us/library/cc756087(WS.10).aspx
24 комментария:
God Job!
Спасибо.
Каким средством предполагается редактировать атрибут employeeID после того, как на него выданы полномочия? Может есть какая-то форма, а не Attribut Editor?
Можно сделать свою форму, можно добавить в основное окно редактора ADUC это поле, можно скриптом.
Я постараюсь в ближайшее время описать возможные способы.
Подскажите, есть ли возможность делегировать пользователю право на блокировку/разблокировку учетных записей и право добавления только в определенные группы безопасности?
1) Блокировка/разблокировка: если имеется в виду enable/disable, то частично да. Есть атрибут userAccountControl, в котором можно это делать. К сожалению, он управляет и дополнительными параметрами типа password never expires, так что если Вы не готовы делегировать и такие права, то имеем проблему, конечно же.
2) Про группы ответ однозначно да, это даже входит в стандартные возможности делегирования доступа: modify the membership of a group.
1. не совсем понял, как можно применить аттрибут userAccountControl
2. стандартные возможности - это да. но мне нужено, чтобы пользователь мог изменять членство только в нескольких группах. есть вариант не через мастер, а через безопасность в свойствах группы, ну а если мне нужно это сделать на 20 группах.
1) Не "применить". Вы можете дать право изменять этот атрибут, после чего у администратора, которому Вы это право делегировали появится возможность делать учетной записи disable/enable. Однако вместе с этим появятся и другие права.
2) Я бы рекомендовал поместить эти группы в отдельное OU, и на них стандартным способом произвести делегирование. Любой другой способ, с большой вероятностью приведет в дальнейшем к проблемам или лишней работе.
Александр, как работать с атрибутом UserAccountControl я понял (http://support.microsoft.com/kb/305144). но значение атрибута UserAccountControl не сохрянется, если я хочу, чтобы это был простой аккаунт и юзер мог блокировать учетки, присваиваю значение атрибута 528 (512+16).читаю дальше, вижу, что в 2003 флаги LOCK_OUT и PASSWORD_EXPIRED заменены новым атрибутом ms-DS-User-Account-Control-Computed. ок, оставляю атрибут UserAccountControl равным 512, меняю значение атрибута ms-DS-User-Account-Control-Computed на 16 (0x0010), пытаюсь примениться, а adsiedit говорит: "доступ к атрибуту не разрешен, т.к. атрибут принадлежит диспетчеру защищенных записей SAM". и как же мне изменить этот атрибут? :)
Перечитал еще раз внимательно http://support.microsoft.com/kb/305144 и не нашел флага отвечающего за enable|disable.
флаг UF_LOCKOUT отвечает за залочивание учетки, а не за блокировку. и его изменить вроде нельзя судя по http://www.selfadsi.org/extended-ad/user-unlock.htm. поэтому мне это и не удалось.
Александр, уточните пож-ста как можно делегировать права на блокировку/разблокировку аккаунтов )) и возможно ли это в принципе.
Ок, я еще раз проверю, как я это сделал на работу и напишу =)
На следующей неделе будет, я думаю, результат.
Ну вот смотрите: только что попробовал.
Была учетная запись с атрибутом userAccountcontrol = 0x200 (dec 512). Я через консоль сделал ей Disable. Атрибут стал 0x202 (514). Потом изменил атрибут обратно на 0x200 и он включился.
Если желаете, могу провести эксперимент чисто - с правами пользователя (и сделать из этого видео даже) =)
А кстати, почему 512+16? Должно быть 512+2. 16 это локаут, который действительно руками ставить нельзя. Нужно accountdisable.
дык как мне наделить пользователя правами блокировки/разблокировки? :))
вот Вы пишете: "Вы можете дать право изменять этот атрибут, после чего у администратора, которому Вы это право делегировали появится возможность делать учетной записи disable/enable."
как это право дать, никак не пойму ))))
все понял )) через файл dssec.dat (у Вас в статье опечатка, файл у вас называется dessec.dat)
но не могу найти этот атрибут в файле...внось уповаю на Вас ))
вот все, что касается пользователя у меня:
[user]
aCSPolicyName=7
adminCount=7
allowedAttributes=7
allowedAttributesEffective=7
allowedChildClasses=7
allowedChildClassesEffective=7
badPasswordTime=7
badPwdCount=7
bridgeheadServerListBL=7
c=7
canonicalName=7
co=7
codePage=7
controlAccessRights=7
countryCode=7
createTimeStamp=7
dBCSPwd=7
defaultClassStore=7
destinationIndicator=7
displayNamePrintable=7
distinguishedName=7
dSASignature=7
dSCorePropagationData=7
dynamicLDAPServer=7
extensionName=7
flags=7
fromEntry=7
frsComputerReferenceBL=7
fRSMemberReferenceBL=7
fSMORoleOwner=7
garbageCollPeriod=7
generationQualifier=7
groupPriority=7
groupsToIgnore=7
instanceType=7
isCriticalSystemObject=7
isDeleted=7
isPrivilegeHolder=7
l=7
lastKnownParent=7
lastLogoff=7
lastLogon=7
legacyExchangeDN=7
lmPwdHistory=7
localeID=7
logonCount=7
mail=7
managedObjects=7
masteredBy=7
maxStorage=7
mhsORAddress=7
modifyTimeStamp=7
mS-DS-ConsistencyChildCount=7
mS-DS-ConsistencyGuid=7
mSMQDigests=7
mSMQDigestsMig=7
mSMQSignCertificates=7
mSMQSignCertificatesMig=7
msNPAllowDialin=7
msNPCallingStationID=7
msNPSavedCallingStationID=7
msRADIUSCallbackNumber=7
msRADIUSFramedIPAddress=7
msRADIUSFramedRoute=7
msRADIUSServiceType=7
msRASSavedCallbackNumber=7
msRASSavedFramedIPAddress=7
msRASSavedFramedRoute=7
netbootSCPBL=7
networkAddress=7
nonSecurityMemberBL=7
ntPwdHistory=7
nTSecurityDescriptor=7
o=7
objectCategory=7
objectClass=7
objectGUID=7
objectVersion=7
operatorCount=7
otherWellKnownObjects=7
ou=7
partialAttributeDeletionList=7
partialAttributeSet=7
physicalDeliveryOfficeName=7
possibleInferiors=7
preferredDeliveryMethod=7
preferredOU=7
primaryGroupID=7
primaryInternationalISDNNumber=7
primaryTelexNumber=7
proxiedObjectName=7
proxyAddresses=7
queryPolicyBL=7
registeredAddress=7
replPropertyMetaData=7
replUpToDateVector=7
repsFrom=7
repsTo=7
revision=7
rid=7
sAMAccountType=7
sDRightsEffective=7
securityIdentifier=7
seeAlso=7
serverReferenceBL=7
servicePrincipalName=7
showInAddressBook=7
showInAdvancedViewOnly=7
sIDHistory=7
siteObjectBL=7
sn=7
st=7
subRefs=7
subSchemaSubEntry=7
supplementalCredentials=7
systemFlags=7
teletexTerminalIdentifier=7
telexNumber=7
terminalServer=7
textEncodedORAddress=7
tokenGroups=7
tokenGroupsNoGCAcceptable=7
unicodePwd=7
url=7
userPassword=7
userSMIMECertificate=7
uSNChanged=7
uSNCreated=7
uSNDSALastObjRemoved=7
USNIntersite=7
uSNLastObjRem=7
uSNSource=7
wbemPath=7
wellKnownObjects=7
whenChanged=7
whenCreated=7
x121Address=7
За опечатку большое спасибо. вычитывал вроде, а все одно проскочило... =)
По поводу атрибута: если его нет в dssec.dat, значит он автоматически доступен в интерфейсе мастера делегирования.
На стадии мастера "tasks to delegate" выбираете "Create a custom task to delegate", потом на "Active Directory Object Type" выбираем "Only the following objects in the folder" и ставим галочку напротив User objects. На вкладке Permissions ставим галочку Property-specific и UserAccountConrol у нас в кармане. =)
Если не так - пишите, будем разбираться.
Александр, все получилось.
спасибо за статью и комментарии )
успехов!!
Всегда пожалуйста. Только помните - если вы хотели дать только право включить или выключить учетную запись, то дали, на самом деле, несколько больше прав.
Александр, подскажи изменять файл dssec.dat нужно на компе на котором запускается оснастка AD, или на домен контроллерах?
Достаточно на станции, где редактируете политику. Честно говоря, даже не уверен, что на DC имеет смысл менять файл, если Вы там не собираетесь менять политику. Но я попробую - записано в toDo =)
Александр, подскажи еще пожалуйста, не получается делегировать права на изменение поля "полное имя". При делегирование указано что разрешить редактирование поля полное имя, однако этого не достаточно.
Скриншот здесь: http://narod.ru/disk/32871155001/attributes.png.html
Спасибо, заранее!
Почему недостаточно? Насколько я вижу, запись в поле можно изменить.
При нажатие кнопки ОК выдается сообщение о недостаточности прав на изменение поля полное имя.
В блоге не очень удобно заниматься траблшутингом. Предлагаю в почту переместиться. Напишите, что конкретно и как Вы делегировали.
alexander[dot]trofimov[at]live[dot]com
Отправить комментарий