Я работаю над программным обеспечением 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;
}
}
Спасибо за ваш впечатленный ответ. Это программное обеспечение предназначено для нужд клиентов, а не для самостоятельного использования. Мой товарищ по команде также сказал, что разрешение на чтение Everyone часто удаляется, когда кто-то пытается что-то поделиться. Поэтому я не могу получить доступ для чтения для администратора домена. но вы предлагаете не использовать два способа, которые вы предоставили: взять владельца и олицетворение. FYI, я также нашел метод запроса WMI для проверки разрешений общих ресурсов, но этот способ основан на некоторых сервисах и настройках брандмауэра на удаленном компьютере. Итак, по крайней мере три метода здесь и какой самый безопасный и эффективный способ сделать это? – hsluoyz
Похоже, вы уже нашли решение. После того, как вы упомянули WMI, я делаю поиск и узнаю, что общая папка отличается от описанной мной. Я удалю ответ в другом сообщении. Я думаю, вы направляетесь в правильном направлении. Я просто обнаружил, что вы, похоже, делаете что-то похожее на [Управление запасами и хранилищами] (http://technet.microsoft.com/en-us/library/cc731574.aspx), но способ, которым вы представляете пользователю, отчет. –
Я не рекомендую использовать олицетворение, потому что я думаю, что предоставление пароля не очень хорошо. Прежде всего, вы действительно не знаете, кому вы должны олицетворять. Во-вторых, вам нужно хранить много пароля пользователя защищенным способом. Выполнение перехода протокола не позволяет сохранить пароль. Однако это связано с настройкой выделенной машины, которая почти такая же мощная, как контроллер домена. Вы не хотите, чтобы ваш клиент установил машину именно для этого. –