Sicherheit benutzerdefinierter Aktionen

Das Installationsprogramm führt benutzerdefinierte Aktionen standardmäßig mit Benutzerberechtigungen aus, um den Zugriff benutzerdefinierter Aktionen auf das System zu beschränken. Das Installationsprogramm kann benutzerdefinierte Aktionen mit erhöhten Rechten ausführen, wenn eine verwaltete Anwendung installiert wird oder wenn die Systemrichtlinie für erhöhte Rechte angegeben wurde.

Sie sollten die MsiHiddenProperties-Eigenschaft und msidbCustomActionTypeHideTarget verwenden, um die Protokollierung vertraulicher Informationen zu verhindern, die von der benutzerdefinierten Aktion verwendet werden. Weitere Informationen zu msidbCustomActionTypeHideTarget finden Sie unter Option für ausgeblendetes Ziel von benutzerdefinierten Aktionen.

Löschen Sie die CustomActionData-Eigenschaft, nachdem Sie sie festgelegt haben, um sicherzustellen, dass vertrauliche Daten nicht mehr verfügbar sind. Folgender Beispielcode ist ein Codeausschnitt, der von einer sofortigen benutzerdefinierten DLL-Aktion verwendet wird, mit der Daten für die Verwendung durch eine verzögerte benutzerdefinierte Aktion namens „MyDeferredCA“ eingerichtet werden:

#include <windows.h>
#include <Msiquery.h>
#pragma comment(lib, "msi.lib")

UINT __stdcall MyImmediateCA(MSIHANDLE hInstall)
{
    // set up information for deferred custom action called MyDeferredCA
    const TCHAR szValue[] = TEXT("data");
    UINT uiStat = ERROR_INSTALL_FAILURE;
    if (ERROR_SUCCESS == MsiSetProperty(hInstall, TEXT("MyDeferredCA"), szValue))
    {
        uiStat = MsiDoAction(hInstall, TEXT("MyDeferredCA"));

        // clear CustomActionData property
        if (ERROR_SUCCESS != MsiSetProperty(hInstall, TEXT("MyDeferredCA"), TEXT("")))
            return ERROR_INSTALL_FAILURE;
    }

    return (uiStat == ERROR_SUCCESS) ? uiStat : ERROR_INSTALL_FAILURE;    
}

Beachten Sie, dass nur verzögert auszuführende benutzerdefinierte Aktionen das msidbCustomActionTypeNoImpersonate-Attribut verwenden können. Weitere Informationen finden Sie unter Optionen für die skriptinterne Ausführung von benutzerdefinierten Aktionen.

Wenn das msidbCustomActionTypeNoImpersonate-Bit für eine benutzerdefinierte Aktion nicht festgelegt ist, führt das Installationsprogramm die benutzerdefinierte Aktion mit Berechtigungen auf Benutzerebene aus. Weitere Informationen finden Sie unter Optionen für die skriptinterne Ausführung von benutzerdefinierten Aktionen.

Wenn das msidbCustomActionTypeNoImpersonate-Bit festgelegt ist und eine verwaltete Anwendung mit Administratorberechtigung installiert wird, kann das Installationsprogramm die benutzerdefinierte Aktion mit erhöhten Rechten ausführen. Wenn ein Benutzer jedoch versucht, die verwaltete Anwendung ohne Administratorberechtigung zu installieren, führt das Installationsprogramm die Anwendung mit Berechtigungen auf Benutzerebene aus, unabhängig davon, ob msidbCustomActionTypeNoImpersonate festgelegt ist.

Beachten Sie, dass eine benutzerdefinierte Aktion auch dann mit Systemberechtigungen ausgeführt werden kann, wenn das msidbCustomActionTypeNoImpersonate-Bit nicht festgelegt ist. Hierzu kommt es, wenn ein Administrator die Anwendung für alle Benutzer auf einem Server installiert, auf dem der Terminalserverrollen-Dienst unter Windows 2000 ausgeführt wird, und die Aktion nicht mit msidbCustomActionTypeTSAware gekennzeichnet ist. Eine benutzerdefinierte Aktion kann auch mit Systemberechtigungen ausgeführt werden, wenn die Installation ohne Vorhandensein eines Benutzerkontexts aufgerufen wird. Beispielsweise, wenn während einer Installation, die von der Windows 2000-Anwendungsbereitstellung aufgerufen wird, kein aktuell angemeldeter Benutzer vorhanden ist.

Beim Erstellen eigener benutzerdefinierter Aktionen sollten Sie die benutzerdefinierte Aktion immer mit sicheren Methoden erstellen. Weitere Informationen finden Sie unter Richtlinien zum Schützen benutzerdefinierter Aktionen.