Guide

Nouvelles mises à jour et améliorations de Roundfleet.

Avis important

Les exemples de code et scripts fournis dans ces tutoriels sont uniquement à des fins éducatives. Roundfleet n'est pas responsable des problèmes, dommages ou vulnérabilités de sécurité qui pourraient survenir lors de l'utilisation, modification ou implémentation de ces exemples. Toujours vérifier et tester le code dans un environnement sécurisé avant de l'utiliser dans des systèmes de production.

Gérer le chiffrement FileVault sur macOS

FileVault offre un chiffrement complet du disque pour les appareils macOS, protégeant les données sensibles même si l'appareil est perdu ou volé. Ce tutoriel montre comment automatiser la gestion de FileVault sur votre Roundfleet en utilisant des scripts en ligne de commande.

Comprendre FileVault

FileVault chiffre l'ensemble du disque de démarrage en utilisant le chiffrement XTS-AES-128 avec une clé de 256 bits. Les avantages clés incluent :

  • Protection des données - Chiffre toutes les données sur le disque de démarrage
  • Conformité - Répond aux exigences de sécurité d'entreprise
  • Performance - Chiffrement accéléré par le matériel sur les Mac modernes
  • Récupération - Plusieurs options de récupération disponibles

Commandes FileVault de base

Vérifier le statut de FileVault

#!/bin/bash

# Vérifier le statut actuel de FileVault
fdesetup status

# Obtenir des informations détaillées sur le chiffrement
diskutil apfs listCryptoUsers /

Activer FileVault

#!/bin/bash

# Commande de base pour activer FileVault
sudo fdesetup enable --user "username" --password "password"

# Activer avec un trousseau spécifique
sudo fdesetup enable --user "username" --password "password" --keychain /Library/Keychains/System.keychain

Désactiver FileVault

#!/bin/bash

# Commande de base pour désactiver FileVault
sudo fdesetup disable --user "username" --password "password"

Script de gestion FileVault d'entreprise

Script complet pour gérer FileVault sur votre Roundfleet :

#!/bin/bash

# Script de gestion FileVault pour Roundfleet
# Compatible avec macOS 10.14+

# Configuration
LOG_FILE="/var/log/filevault_management.log"
KEYCHAIN_PATH="/Library/Keychains/System.keychain"

# Fonction pour journaliser les messages
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# Fonction pour obtenir l'utilisateur actuel
get_current_user() {
    stat -f "%Su" /dev/console
}

# Fonction pour vérifier si l'utilisateur a un token sécurisé
check_secure_token() {
    local username="$1"
    
    if sysadminctl -secureTokenStatus "$username" 2>/dev/null | grep -q "ENABLED"; then
        return 0
    else
        return 1
    fi
}

# Fonction pour vérifier le statut de FileVault
check_filevault_status() {
    local status
    status=$(fdesetup status)
    
    if echo "$status" | grep -q "FileVault is On"; then
        echo "enabled"
    elif echo "$status" | grep -q "FileVault is Off"; then
        echo "disabled"
    elif echo "$status" | grep -q "Encryption in progress"; then
        echo "encrypting"
    elif echo "$status" | grep -q "Decryption in progress"; then
        echo "decrypting"
    else
        echo "unknown"
    fi
}

# Fonction pour obtenir le progrès du chiffrement
get_encryption_progress() {
    fdesetup status | grep -o '[0-9]\+%' | head -1
}

# Fonction pour valider les identifiants utilisateur
validate_user_credentials() {
    local username="$1"
    local password="$2"
    
    # Vérifier si l'utilisateur existe
    if ! id "$username" &>/dev/null; then
        log_message "✗ L'utilisateur n'existe pas : $username"
        return 1
    fi
    
    # Vérifier si l'utilisateur a des privilèges admin
    if ! dsmemberutil checkmembership -U "$username" -G admin &>/dev/null; then
        log_message "✗ L'utilisateur n'est pas un administrateur : $username"
        return 1
    fi
    
    # Vérifier si l'utilisateur a un token sécurisé
    if ! check_secure_token "$username"; then
        log_message "✗ L'utilisateur n'a pas de token sécurisé : $username"
        return 1
    fi
    
    # Vérifier le mot de passe (vérification de base)
    if [[ -z "$password" ]]; then
        log_message "✗ Le mot de passe ne peut pas être vide pour l'utilisateur : $username"
        return 1
    fi
    
    log_message "✓ Identifiants utilisateur validés : $username"
    return 0
}

# Fonction pour activer FileVault
enable_filevault() {
    local username="$1"
    local password="$2"
    local force_enable="$3"
    
    log_message "Début de l'activation de FileVault pour l'utilisateur : $username"
    
    # Vérifier le statut actuel
    local current_status
    current_status=$(check_filevault_status)
    
    case "$current_status" in
        "enabled")
            log_message "! FileVault est déjà activé"
            if [[ "$force_enable" != "true" ]]; then
                return 0
            fi
            ;;
        "encrypting")
            log_message "! Le chiffrement FileVault est déjà en cours"
            local progress
            progress=$(get_encryption_progress)
            log_message "  Progrès du chiffrement : ${progress:-Inconnu}"
            return 0
            ;;
        "decrypting")
            log_message "✗ Impossible d'activer FileVault pendant qu'un déchiffrement est en cours"
            return 1
            ;;
    esac
    
    # Valider les identifiants utilisateur
    if ! validate_user_credentials "$username" "$password"; then
        return 1
    fi
    
    # Activer FileVault
    log_message "Activation de FileVault..."
    
    if fdesetup enable -user "$username" -password "$password" -keychain "$KEYCHAIN_PATH" 2>/dev/null; then
        log_message "✓ Commande d'activation de FileVault exécutée avec succès"
        
        # Attendre un moment et vérifier le statut
        sleep 5
        local new_status
        new_status=$(check_filevault_status)
        
        case "$new_status" in
            "enabled")
                log_message "✓ FileVault est maintenant activé"
                ;;
            "encrypting")
                local progress
                progress=$(get_encryption_progress)
                log_message "✓ Chiffrement FileVault démarré (${progress:-0%})"
                ;;
            *)
                log_message "! Statut FileVault incertain : $new_status"
                ;;
        esac
        
        return 0
    else
        log_message "✗ Échec de l'activation de FileVault"
        return 1
    fi
}

# Fonction pour désactiver FileVault
disable_filevault() {
    local username="$1"
    local password="$2"
    local force_disable="$3"
    
    log_message "Début de la désactivation de FileVault pour l'utilisateur : $username"
    
    # Vérifier le statut actuel
    local current_status
    current_status=$(check_filevault_status)
    
    case "$current_status" in
        "disabled")
            log_message "! FileVault est déjà désactivé"
            if [[ "$force_disable" != "true" ]]; then
                return 0
            fi
            ;;
        "decrypting")
            log_message "! Le déchiffrement FileVault est déjà en cours"
            local progress
            progress=$(get_encryption_progress)
            log_message "  Progrès du déchiffrement : ${progress:-Inconnu}"
            return 0
            ;;
        "encrypting")
            log_message "✗ Impossible de désactiver FileVault pendant qu'un chiffrement est en cours"
            return 1
            ;;
    esac
    
    # Valider les identifiants utilisateur
    if ! validate_user_credentials "$username" "$password"; then
        return 1
    fi
    
    # Désactiver FileVault
    log_message "Désactivation de FileVault..."
    
    if fdesetup disable -user "$username" -password "$password" 2>/dev/null; then
        log_message "✓ Commande de désactivation de FileVault exécutée avec succès"
        
        # Attendre un moment et vérifier le statut
        sleep 5
        local new_status
        new_status=$(check_filevault_status)
        
        case "$new_status" in
            "disabled")
                log_message "✓ FileVault est maintenant désactivé"
                ;;
            "decrypting")
                local progress
                progress=$(get_encryption_progress)
                log_message "✓ Déchiffrement FileVault démarré (${progress:-0%})"
                ;;
            *)
                log_message "! Statut FileVault incertain : $new_status"
                ;;
        esac
        
        return 0
    else
        log_message "✗ Échec de la désactivation de FileVault"
        return 1
    fi
}

# Fonction pour obtenir les informations système
get_system_info() {
    log_message "=== Informations système ==="
    log_message "Nom d'hôte : $(hostname)"
    log_message "Version macOS : $(sw_vers -productVersion)"
    log_message "Utilisateur actuel : $(get_current_user)"
    log_message "Statut FileVault : $(check_filevault_status)"
    
    # Obtenir les utilisateurs FileVault
    local fv_users
    fv_users=$(fdesetup list 2>/dev/null)
    if [[ -n "$fv_users" ]]; then
        log_message "Utilisateurs avec FileVault activé :"
        echo "$fv_users" | while read -r line; do
            log_message "  $line"
        done
    fi
}

# Fonction pour afficher l'usage
usage() {
    echo "Usage : $0 {enable|disable|status} [options]"
    echo ""
    echo "Commandes :"
    echo "  enable    Activer FileVault"
    echo "  disable   Désactiver FileVault"
    echo "  status    Vérifier le statut de FileVault"
    echo ""
    echo "Options :"
    echo "  -u, --user USERNAME      Spécifier le nom d'utilisateur"
    echo "  -p, --password PASSWORD  Spécifier le mot de passe"
    echo "  -f, --force             Forcer l'opération même si déjà dans l'état désiré"
    echo "  -h, --help              Afficher ce message d'aide"
    echo ""
    echo "Exemples :"
    echo "  $0 enable -u admin -p password123"
    echo "  $0 disable -u admin -p password123 -f"
    echo "  $0 status"
}

# Fonction principale
main() {
    local command="$1"
    local username=""
    local password=""
    local force="false"
    
    # Analyser les arguments
    shift
    while [[ $# -gt 0 ]]; do
        case $1 in
            -u|--user)
                username="$2"
                shift 2
                ;;
            -p|--password)
                password="$2"
                shift 2
                ;;
            -f|--force)
                force="true"
                shift
                ;;
            -h|--help)
                usage
                exit 0
                ;;
            *)
                echo "Option inconnue : $1"
                usage
                exit 1
                ;;
        esac
    done
    
    # Exécuter la commande
    case "$command" in
        "enable")
            if [[ -z "$username" ]] || [[ -z "$password" ]]; then
                echo "Erreur : Nom d'utilisateur et mot de passe requis pour la commande enable"
                usage
                exit 1
            fi
            
            log_message "=== Début de l'opération d'activation de FileVault ==="
            get_system_info
            
            if enable_filevault "$username" "$password" "$force"; then
                log_message "=== Opération d'activation de FileVault terminée avec succès ==="
                exit 0
            else
                log_message "=== Échec de l'opération d'activation de FileVault ==="
                exit 1
            fi
            ;;
        "disable")
            if [[ -z "$username" ]] || [[ -z "$password" ]]; then
                echo "Erreur : Nom d'utilisateur et mot de passe requis pour la commande disable"
                usage
                exit 1
            fi
            
            log_message "=== Début de l'opération de désactivation de FileVault ==="
            get_system_info
            
            if disable_filevault "$username" "$password" "$force"; then
                log_message "=== Opération de désactivation de FileVault terminée avec succès ==="
                exit 0
            else
                log_message "=== Échec de l'opération de désactivation de FileVault ==="
                exit 1
            fi
            ;;
        "status")
            get_system_info
            exit 0
            ;;
        *)
            echo "Erreur : Commande invalide : $command"
            usage
            exit 1
            ;;
    esac
}

# Exécuter la fonction principale
main "$@"

Scripts FileVault rapides

Script d'activation simple

#!/bin/bash

USERNAME="admin"
PASSWORD="votre_mot_de_passe_ici"

if fdesetup enable -user "$USERNAME" -password "$PASSWORD"; then
    echo "FileVault activé avec succès"
else
    echo "Échec de l'activation de FileVault"
    exit 1
fi

Vérification simple du statut

#!/bin/bash

STATUS=$(fdesetup status)
echo "Statut FileVault : $STATUS"

if echo "$STATUS" | grep -q "FileVault is On"; then
    echo "✓ FileVault est activé"
    exit 0
elif echo "$STATUS" | grep -q "FileVault is Off"; then
    echo "✗ FileVault est désactivé"
    exit 1
else
    echo "! Statut FileVault incertain"
    exit 2
fi

Gestion des clés de récupération

Générer une clé de récupération personnelle

#!/bin/bash

# Activer FileVault avec clé de récupération personnelle
sudo fdesetup enable -user "$USERNAME" -password "$PASSWORD" -outputplist > /tmp/filevault_key.plist

# Extraire la clé de récupération
RECOVERY_KEY=$(grep -A1 "RecoveryKey" /tmp/filevault_key.plist | tail -1 | sed 's/.*<string>\(.*\)<\/string>.*/\1/')

echo "Clé de récupération : $RECOVERY_KEY"

# Stocker la clé de récupération en sécurité
echo "$RECOVERY_KEY" | sudo tee /var/root/filevault_recovery_key.txt
sudo chmod 600 /var/root/filevault_recovery_key.txt

# Nettoyer
rm -f /tmp/filevault_key.plist

Activer la clé de récupération institutionnelle

#!/bin/bash

# Créer une clé de récupération institutionnelle
CERT_PATH="/path/to/institutional_certificate.cer"

if [[ -f "$CERT_PATH" ]]; then
    sudo fdesetup enable -user "$USERNAME" -password "$PASSWORD" -certificate "$CERT_PATH"
    echo "FileVault activé avec clé de récupération institutionnelle"
else
    echo "Certificat institutionnel non trouvé : $CERT_PATH"
    exit 1
fi

Dépannage des problèmes courants

Corriger les problèmes de token sécurisé

#!/bin/bash

USERNAME="admin"

# Accorder un token sécurisé à l'utilisateur
sudo sysadminctl -secureTokenOn "$USERNAME" -password -

# Vérifier le token sécurisé
if sysadminctl -secureTokenStatus "$USERNAME" | grep -q "ENABLED"; then
    echo "✓ Token sécurisé activé pour $USERNAME"
else
    echo "✗ Échec de l'activation du token sécurisé pour $USERNAME"
fi

Gérer l'erreur de mot de passe vide

#!/bin/bash

USERNAME="admin"

# Vérifier si l'utilisateur a un mot de passe défini
if dscl . -read "/Users/$USERNAME" AuthenticationAuthority | grep -q "No such key"; then
    echo "L'utilisateur $USERNAME n'a pas de mot de passe défini"
    echo "Définition du mot de passe..."
    sudo dscl . -passwd "/Users/$USERNAME" "" "nouveau_mot_de_passe_ici"
fi

Surveillance et rapports

Rapport de statut FileVault

#!/bin/bash

# Générer un rapport de statut FileVault
REPORT_FILE="/tmp/filevault_report.txt"

{
    echo "=== Rapport de statut FileVault ==="
    echo "Généré : $(date)"
    echo "Nom d'hôte : $(hostname)"
    echo ""
    
    echo "=== Statut FileVault ==="
    fdesetup status
    echo ""
    
    echo "=== Utilisateurs activés ==="
    fdesetup list
    echo ""
    
    echo "=== Statut du token sécurisé ==="
    for user in $(dscl . -list /Users | grep -v '^_'); do
        if [[ "$user" != "daemon" ]] && [[ "$user" != "nobody" ]]; then
            token_status=$(sysadminctl -secureTokenStatus "$user" 2>/dev/null | grep -o "ENABLED\|DISABLED")
            echo "Utilisateur : $user - Token : ${token_status:-INCONNU}"
        fi
    done
    
} > "$REPORT_FILE"

echo "Rapport généré : $REPORT_FILE"

Solutions aux erreurs courantes

ErreurCauseSolution
"Blank password"L'utilisateur n'a pas de mot de passeDéfinir un mot de passe avec dscl . -passwd
"Master keychain found"Ambiguïté du trousseauAjouter le paramètre -keychain
"Secure token required"L'utilisateur n'a pas de token sécuriséAccorder un token avec sysadminctl
"Already encrypted"FileVault déjà activéUtiliser -force ou vérifier le statut d'abord
"Encryption in progress"Opération concurrenteAttendre la fin

Bonnes pratiques de sécurité

  • Utiliser des mots de passe forts pour les comptes avec FileVault activé
  • Stocker les clés de récupération en sécurité dans la gestion des clés d'entreprise
  • Tester les scripts sur des appareils isolés avant le déploiement en flotte
  • Surveiller le progrès du chiffrement pour assurer la completion
  • Sauvegarder les clés de récupération avant de faire des modifications
  • Valider les permissions utilisateur avant de tenter des opérations

Considérations de performance

  • Le chiffrement initial peut prendre plusieurs heures
  • Les performances du système peuvent être impactées pendant le chiffrement
  • Planifier les opérations pendant les fenêtres de maintenance
  • Surveiller l'espace disque (le chiffrement nécessite de l'espace libre)
  • Considérer les différences de performance SSD vs HDD

Notes importantes

  • FileVault nécessite des privilèges administrateur et des tokens sécurisés
  • Les clés de récupération sont essentielles pour la récupération des données
  • Le chiffrement/déchiffrement ne peut pas être interrompu en sécurité
  • Tester tous les scripts minutieusement avant l'utilisation en production
  • Toujours avoir un plan de récupération de sauvegarde

Related Tutorials

Gestion du Chiffrement FileVault Entreprise sur macOS

Surveillez le statut de chiffrement FileVault, suivez la progression du chiffrement et gérez la conformité du chiffrement de disque sur les appareils Roundfleet avec des fonctionnalités de sécurité d'entreprise avancées.

7 juil. 2025

Gestion du Chiffrement de Fichiers sur macOS

Apprenez à chiffrer et déchiffrer des fichiers sur macOS en utilisant OpenSSL, implémenter des politiques de chiffrement d'entreprise, gérer les clés de chiffrement, et assurer la conformité de la sécurité des données sur votre flotte.

7 juil. 2025

Gestion Sécurisée d'Archives sur macOS

Apprenez à créer, gérer et sécuriser des archives sur les appareils macOS en utilisant des fichiers ZIP protégés par mot de passe avec sécurité de niveau entreprise, opérations par lots, suivi de conformité et capacités de gestion d'archives à l'échelle de la flotte.

7 juil. 2025

Gestion des Jetons Sécurisés sur macOS

Apprenez à gérer et accorder des jetons sécurisés aux utilisateurs sur les appareils macOS en utilisant sysadminctl pour la sécurité d'entreprise, la gestion FileVault et l'authentification des opérations cryptographiques.

7 juil. 2025

Effacement Sécurisé de Données sur macOS

Apprenez à effacer de manière sécurisée l'espace libre et gérer la confidentialité des données sur les appareils macOS en utilisant des outils d'effacement sécurisé avancés avec surveillance de conformité, protection de la vie privée et capacités de sécurité des données à l'échelle de la flotte.

7 juil. 2025

Sécurité de Verrouillage d'Écran d'Entreprise sur macOS

Configurez et appliquez les exigences de mot de passe de verrouillage d'écran, les politiques de sécurité de veille et les mécanismes de verrouillage automatisés sur les appareils macOS en utilisant l'automatisation AppleScript et les frameworks de sécurité d'entreprise.

7 juil. 2025

Protection de Fichiers d'Entreprise sur macOS

Implémentez une protection complète des fichiers et applications sur les appareils macOS en utilisant les drapeaux immuables, les contrôles d'accès et les politiques de sécurité d'entreprise pour la protection des données organisationnelles.

7 juil. 2025

Gestion d'Entreprise d'Ouverture de Fichiers et Dossiers sur macOS

Guide complet pour les opérations d'ouverture de fichiers et dossiers d'entreprise sur les appareils Roundfleet avec validation de sécurité, contrôle d'applications et gestion d'accès automatisée.

7 juil. 2025