0

ドメイン管理者アカウントを入力すると、ドメイン内のすべてのユーザー、グループ、および共有フォルダー情報を表示できる Windows ソフトウェアに取り組んでいます。これらのフォルダーはドメイン管理者に共有アクセス許可を付与していないため、一部の共有フォルダー情報を取得するのに問題があります (共有タブで [全員] を削除します)。GetFileSecurity または GetNamedSecurityInfo はエラー コード 5 を返します)。しかし、ドメイン管理者として、ドメイン コンピューターの共有フォルダーのアクセス許可情報 (ACL のみ、フル アクセス許可は必要ありません) にアクセスできると思います。

別のユーザーとしてログオンする偽装方法について学び、共有フォルダーの共有タブで読み取り権限を付与されたドメイン ユーザーとしてログオンすると、ACL を正常に取得できました。しかし、ここでの問題は、ユーザー名を知っていてパスワードを変更できるにもかかわらず、実際の環境ではドメイン ユーザーのパスワードを知らないことです。

では、ドメイン管理者アカウントを既に持っている場合に、ドメイン ユーザーのアクセス トークンを偽装する方法、または他に方法はありますか?

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;
   }

}

4

3 に答える 3

2

あなたからの別の質問を読みました。私はあなたが何をしようとしているのか理解していると思います。目的を達成するには、偽装レベルが「Impersonate」または「Delegate」のアクセス トークンが必要です。さまざまな方法で入手できます。パスワードを提供するのが最も簡単な方法です。別のアプローチは、Protocol Transitionを実行するようにマシンをセットアップすることです。

私の個人的な提案は、なりすましを避けることです。すべての共有フォルダにドメイン管理者が読み取りアクセス権を付与されていることを確認してください。別の質問で示したように、これはセキュリティ上の妥協ではありません。ドメイン管理者は、必要に応じて、いつでもフォルダーを読み取ることができます。

また、同様のことを行う SysInternals から入手できる既存のツールがいくつかあります

SysInternals の AccessChk.exe と AccessEnum.exe を確認してください

どちらも、現在直面しているものと同じ許可の問題に苦しんでいます。

于 2012-06-23T23:54:29.560 に答える
0

作成時に、プロファイルまたはホーム ドライブを含む共有への管理者アクセス権を付与するのを忘れることは、よくある間違いです。アクセス許可は通常、CREATOR OWNERによって駆動され、そのような共有では継承が壊れています。管理者が内部に入る唯一の方法は、所有権を取得することです。もちろん、所有権を取得すると、エンド ユーザーに問題が発生します。場合によっては、特定のフォルダの所有者が明らかな場合 (たとえば、フォルダ名がユーザー アカウント名と同じ)、所有権を取得するスクリプトを使用できます -> 管理者権限を設定する -> 収集したユーザー アカウント名に権限を戻すフォルダ名から。それでも興味がある場合は、ここにコードを投稿できます

于 2014-01-30T22:27:37.127 に答える
0

あなたがパスワードを持っていないアカウントを「なりすます」ことはできませんし、そうすべきではありません.明示的に許可されていない限り、自分のパスワードを変更します。また、許可されていない限り、所有者ではないフォルダのアクセス許可を変更しないでください。「管理者」であることは、あなたが神のような生き物であり、会社のポリシーから免除されることを意味するものではありません.

それはすべて「説明責任」に関するものです。アカウントは、アクセスを許可または拒否するだけでなく、誰が何を作成したかを記録および監査し、それによって説明責任を負います。ある種の機密情報にアクセスできる人を特定して制御し、それらにアクセスできる人の数を制限することを要求できる法的要件があります。Windows には、ファイル アクセスを含むユーザー アクションを監査する機能があります。

そのため、Windows では、明示的に許可されていない限り、たとえ管理者であっても、ユーザーに代わって行動することはできません。

また、管理者によるフォルダへのアクセスを削除するのには十分な理由があります。管理者が常に何かにアクセスできるからといって、それが許可されているわけではありません。また、許可なしで行うと問題が発生する可能性があります。(一部の) 管理者から権限を削除すると、明示的にアクセスが許可されていないファイルに「誤って」アクセスできなくなります。

適切にセットアップされたシステムでは、管理者がログをクリアしてトラックを隠すことなく、データ保護に関する会社のポリシーが適用および監査されるようにするために、ほとんどの管理者はアクセスできないが、高度な特権を持つ管理者はアクセスできない別のマシンにもログが送信されます。

于 2014-11-07T12:35:22.800 に答える