Sécurité de l’action personnalisée

Le programme d’installation exécute des actions personnalisées avec des privilèges utilisateur par défaut afin de limiter l’accès des actions personnalisées au système. Le programme d’installation peut exécuter des actions personnalisées avec des privilèges élevés si une application managée est en cours d’installation ou si la stratégie système a été spécifiée pour des privilèges élevés.

Vous devez utiliser la propriété MsiHiddenProperties et msidbCustomActionTypeHideTarget pour empêcher la journalisation des informations sensibles utilisées par l’action personnalisée. Pour plus d’informations sur msidbCustomActionTypeHideTarget, consultez Option cible masquée d’action personnalisée.

Effacez la propriété CustomActionData après l’avoir définie pour vous assurer que les données sensibles ne sont plus disponibles. L’exemple de code ci-dessous est un extrait de code utilisé par une action personnalisée de DLL immédiate qui configure les données pour une utilisation par une action personnalisée différée appelée « MyDeferredCA » :

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

Notez que seules les actions personnalisées d’exécution différée peuvent utiliser l’attribut msidbCustomActionTypeNoImpersonate. Pour plus d’informations, consultez Action personnalisée dans les options d’exécution dans le script.

Si le bit msidbCustomActionTypeNoImpersonate n’est pas défini pour une action personnalisée, le programme d’installation exécute l’action personnalisée avec des privilèges au niveau de l’utilisateur. Pour plus d’informations, consultez Action personnalisée dans les options d’exécution dans le script.

Si le bit msidbCustomActionTypeNoImpersonate est défini et qu’une application managée est installée avec l’autorisation d’administrateur, le programme d’installation peut exécuter l’action personnalisée avec des privilèges élevés. Toutefois, si un utilisateur tente d’installer l’application managée sans autorisation d’administrateur, le programme d’installation exécute l’application avec des privilèges de niveau utilisateur, que msidbCustomActionTypeNoImpersonate soit défini ou non.

Notez qu’une action personnalisée peut s’exécuter avec des privilèges système, même si le bit msidbCustomActionTypeNoImpersonate n’est pas défini. Cela se produit si un administrateur installe l’application pour tous les utilisateurs sur un serveur exécutant le service de rôle Terminal Server à l’aide de Windows 2000 et que l’action n’est pas marquée avec msidbCustomActionTypeTSAware. Une action personnalisée peut également s’exécuter avec des privilèges système si l’installation est appelée en l’absence de contexte utilisateur. Par exemple, s’il n’existe aucun utilisateur connecté au cours d’une installation appelée par le déploiement d’applications Windows 2000.

Lorsque vous créez vos propres actions personnalisées, vous devez toujours créer l’action personnalisée à l’aide de méthodes sécurisées. Pour plus d’informations, consultez Recommandations pour la sécurisation des actions personnalisées.