2012-06-08 5 views
0

Я работаю над программным обеспечением Windows, которое может отображать информацию о всех пользователях, группах и общих папках в домене при вводе учетной записи администратора домена. У меня есть некоторые проблемы с получением информации об общих папках, поскольку эти папки даже не разрешали доступ к доменам администраторам домена (удалите вкладку «Все на вкладке»). GetFileSecurity или GetNamedSecurityInfo возвращает код ошибки 5). Но как администратор домена, я думаю, что я мог бы получить доступ к информации о разрешении общих папок (просто ACL, без необходимости полного доступа) на моих компьютерах домена.Как олицетворять другого пользователя домена, поскольку у меня есть учетная запись администратора этого домена AD?

Я узнал о том, как использовать метод олицетворения для входа в систему, чтобы быть другим пользователем, и если я вхожу в систему как пользователь домена, которому разрешено разрешение на чтение на вкладке общего доступа к общей папке, я мог бы получить списки управления доступом. Но проблема здесь в том, что я не знаю пароль пользователя домена в практической среде, даже если я знаю их имена пользователей и могу менять свои пароли.

Итак, как получить токен доступа к домену для олицетворения, когда у меня уже есть учетная запись администратора домена, или есть ли какой-либо другой способ?

Я разрабатываю его с использованием C++ и ADSI. Вот журнал дальше и получить NTFS методы безопасности: Дайте описание

BOOL ADDirectorySearch :: logOnByUserPassword (CString strDomainName, CString strUserName, CString strPassword) {

CString strFullUserName = strDomainName + _T("\\") + strUserName; 
HANDLE hToken; 
BOOL bResult; 
bResult = LogonUser(strFullUserName, strDomainName, strPassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, &hToken); 
if (bResult == FALSE) 
{ 
    MyMessageBox_Error(_T("logOnByUserPassword Error."), _T("Error")); 
    return FALSE; 
} 
else 
{ 
    bResult = ImpersonateLoggedOnUser(hToken); 
    if (bResult == FALSE) 
    { 
     MyMessageBox_Error(_T("logOnByUserPassword Error."), _T("Error")); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 
} 

}

PSECURITY_DESCRIPTOR ADDirectorySearch :: getNTFSSecDescriptor2 (CString strFileName, CString strServerName, CString strServerIP) {

//CString strServerNameWithSlash = _T("\\\\") + strServerName;//"\\\\veotax3"; 
CString strFilePathName = _T("\\\\") + strServerName + _T("\\") + strFileName;//"\\\\veotax3\\nrdc1001"; 
CString strFilePathName2 = _T("\\\\") + strServerIP + _T("\\") + strFileName;//"\\\\192.168.1.7\\nrdc1001"; 
_bstr_t bstrFilePathName = strFilePathName; 

BOOL bSuccess = FALSE; 
PSECURITY_DESCRIPTOR pSecDescriptorBuf = NULL; 
DWORD dwSizeNeeded = 0;label2:; 
    bSuccess = GetNamedSecurityInfoW(bstrFilePathName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSecDescriptorBuf); 
    //bSuccess = GetFileSecurityW(bstrFilePathName, DACL_SECURITY_INFORMATION, NULL, 0, &dwSizeNeeded); 
    if (ERROR_SUCCESS != bSuccess) 
    { 
     if (strFilePathName != strFilePathName2) 
     { 
      strFilePathName = strFilePathName2; 
      bstrFilePathName = strFilePathName2; 
      goto label2; 
     } 
     else 
     { 
      MyMessageBox_Error(_T("getNTFSSecDescriptor2 Error."), _T("Error")); 
      return NULL; 
     } 
    } 
    else 
    { 
     return pSecDescriptorBuf; 
    } 

}

ответ

2

Я прочитал от вас другой вопрос. Думаю, я понимаю, что вы пытаетесь сделать. Для достижения вашей цели вам нужно иметь токен доступа с impersonation level «Олицетворять» или «Делегат». Вы можете получить его по-разному. Предоставление пароля - это самый простой подход. Другой подход - настроить машину на выполнение Protocol Transition.

Мое личное предложение - не делать олицетворения. Просто убедитесь, что для всех общих папок у администратора домена есть доступ для чтения. Как я показал в другом вопросе, это вовсе не компромисс в области безопасности. Администратор домена всегда может иметь возможность читать папку в любом случае, если захочет.

Кроме того, существует несколько существующих инструментов, доступных от SysInternals, схожих вещей.

Заканчивать AccessChk.exe и AccessEnum.exe от SysInternals

Они оба страдают от тех же проблем разрешения, как то, что вы столкнулись в настоящее время.

+0

Спасибо за ваш впечатленный ответ. Это программное обеспечение предназначено для нужд клиентов, а не для самостоятельного использования. Мой товарищ по команде также сказал, что разрешение на чтение Everyone часто удаляется, когда кто-то пытается что-то поделиться. Поэтому я не могу получить доступ для чтения для администратора домена. но вы предлагаете не использовать два способа, которые вы предоставили: взять владельца и олицетворение. FYI, я также нашел метод запроса WMI для проверки разрешений общих ресурсов, но этот способ основан на некоторых сервисах и настройках брандмауэра на удаленном компьютере. Итак, по крайней мере три метода здесь и какой самый безопасный и эффективный способ сделать это? – hsluoyz

+0

Похоже, вы уже нашли решение. После того, как вы упомянули WMI, я делаю поиск и узнаю, что общая папка отличается от описанной мной. Я удалю ответ в другом сообщении. Я думаю, вы направляетесь в правильном направлении. Я просто обнаружил, что вы, похоже, делаете что-то похожее на [Управление запасами и хранилищами] (http://technet.microsoft.com/en-us/library/cc731574.aspx), но способ, которым вы представляете пользователю, отчет. –

+0

Я не рекомендую использовать олицетворение, потому что я думаю, что предоставление пароля не очень хорошо. Прежде всего, вы действительно не знаете, кому вы должны олицетворять. Во-вторых, вам нужно хранить много пароля пользователя защищенным способом. Выполнение перехода протокола не позволяет сохранить пароль. Однако это связано с настройкой выделенной машины, которая почти такая же мощная, как контроллер домена. Вы не хотите, чтобы ваш клиент установил машину именно для этого. –

0

Ошибочно забыть о предоставлении доступа администратора к общим ресурсам, содержащим профили или домашние диски, во время их создания. Разрешения обычно приводятся через СОБСТВЕННИК СОЗДАТЕЛЯ, и наследование нарушается в таких акциях. Только путь для админов, чтобы попасть внутрь, - это взять на себя управление. Принятие прав собственности, конечно, вызовет проблемы для конечных пользователей. В некоторых случаях, когда понятно, кто является владельцем конкретной папки (например.имя папки равно имени учетной записи пользователя), вы можете использовать скрипт, который будет принимать права собственности -> установить разрешение администратора -> установить разрешение на имя учетной записи пользователя, собранное из имени папки. Если вы все еще заинтересованы, я могу выслать здесь код

0

Вы не можете и не должны «олицетворять» любую учетную запись, у которой у вас нет пароля, и, следовательно, нет разрешения на использование - потому что вы не имеете в виду делать что-либо от его имени, даже если вы являетесь администратором и можете изменить свой пароль - если только это не разрешено явно. Также вы не должны изменять разрешения в любой папке, которой вы не являетесь владельцем - если не разрешено. Быть «администратором» не означает, что вы - богоподобное существо, и вы освобождаетесь от политики компании.

Это все о «подотчетности» - счета не только разрешают или запрещают доступ, но и регистрируют и проверяют также, кто сделал то, что и тем самым подотчетно. Существуют законодательные требования, которые могут требовать определения и контроля того, кто имеет доступ к какой-либо конфиденциальной информации, и ограничивать количество людей, которые могут получить к ним доступ. У Windows есть возможности для проверки действий пользователей, в том числе доступа к файлам.

Именно поэтому Windows не позволяет вам действовать от имени любых пользователей, если только это не разрешено, даже если ваш администратор.

Имеются веские основания также устранять доступ администраторов из папок - тот факт, что администратор всегда может получить доступ к чему-то, не означает, что ему или ей разрешено это делать - и без разрешения может поставить вас в беду , Удаление разрешения от (некоторых) администраторов означает, что вы не можете «по ошибке» получить доступ к файлам доступа, к которым вы явно не разрешены.

В правильно установленных системах журналы также отправляются на разные машины, где большинство администраторов, но высокоприоритетных, не имеют доступа - чтобы обеспечить соблюдение и проверку политик компании в отношении защиты данных, при этом администраторы не могут очистить журналы, чтобы скрыть их дорожек.

Смежные вопросы