Gestion des Préférences Système sur macOS
Gérez et contrôlez l'accès aux Préférences Système sur vos appareils MacFleet avec une gestion complète des panneaux de préférences, des contrôles de restriction utilisateur et des solutions de configuration d'entreprise. Ce tutoriel couvre le masquage, la désactivation et le contrôle des Préférences Système pour une sécurité et conformité renforcées.
Comprendre la Gestion des Préférences Système
Les Préférences Système sur macOS fournissent l'accès aux paramètres de configuration système :
- Panneaux de Préférences - Modules de configuration individuels (Réseau, Sécurité, Utilisateurs, etc.)
- Identifiants de Bundle - Identifiants uniques pour chaque panneau de préférences
- Masqué vs Désactivé - Différents niveaux de restriction d'accès
- Contrôle d'Entreprise - Gestion centralisée de l'accès utilisateur aux paramètres système
Cas d'Usage d'Entreprise
La gestion des Préférences Système bénéficie aux environnements d'entreprise :
- Durcissement de Sécurité - Empêcher les modifications de configuration non autorisées
- Conformité - Assurer que les appareils respectent les exigences réglementaires
- Expérience Utilisateur - Simplifier les interfaces en masquant les options non pertinentes
- Contrôle Administratif - Centraliser la gestion de configuration
- Protection des Données - Restreindre l'accès aux paramètres système sensibles
Contrôle de Base des Préférences Système
Masquer le Panneau Profils
#!/bin/bash
# Masquer le panneau Profils des Préférences Système
hide_profiles_pane() {
echo "=== Masquage du Panneau Profils ==="
# Vérifier la version macOS (le masquage nécessite macOS 13.0+)
local macos_version=$(sw_vers -productVersion | cut -d. -f1)
if [[ $macos_version -lt 13 ]]; then
echo "Avertissement : Le masquage des panneaux nécessite macOS 13.0 ou ultérieur"
echo "Version actuelle : $(sw_vers -productVersion)"
echo "Utilisation de la désactivation au lieu du masquage..."
disable_profiles_pane
return
fi
# Masquer le panneau Profils
defaults write "/Library/Preferences/com.apple.systempreferences" \
HiddenPreferencePanes -array "com.apple.preferences.configurationprofiles"
if [[ $? -eq 0 ]]; then
echo "✓ Panneau Profils masqué avec succès"
echo "Les utilisateurs ne verront plus le panneau Profils dans les Préférences Système"
else
echo "✗ Échec du masquage du panneau Profils"
return 1
fi
}
# Désactiver le panneau Profils (alternative pour macOS plus ancien)
disable_profiles_pane() {
echo "=== Désactivation du Panneau Profils ==="
# Désactiver le panneau Profils (fonctionne sur macOS 10.2+)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "com.apple.preferences.configurationprofiles"
if [[ $? -eq 0 ]]; then
echo "✓ Panneau Profils désactivé avec succès"
echo "Le panneau Profils apparaîtra grisé dans les Préférences Système"
else
echo "✗ Échec de la désactivation du panneau Profils"
return 1
fi
}
# Usage
hide_profiles_pane
Restaurer/Réactiver le Panneau Profils
#!/bin/bash
# Restaurer l'accès au panneau Profils
restore_profiles_pane() {
echo "=== Restauration de l'Accès au Panneau Profils ==="
# Supprimer des panneaux masqués
local hidden_panes=$(defaults read "/Library/Preferences/com.apple.systempreferences" HiddenPreferencePanes 2>/dev/null)
if [[ -n "$hidden_panes" ]]; then
echo "Suppression des panneaux masqués..."
defaults delete "/Library/Preferences/com.apple.systempreferences" HiddenPreferencePanes 2>/dev/null
fi
# Supprimer des panneaux désactivés
local disabled_panes=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null)
if [[ -n "$disabled_panes" ]]; then
echo "Suppression des panneaux désactivés..."
defaults delete "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null
fi
echo "✓ Accès au panneau Profils restauré"
echo "Les utilisateurs peuvent maintenant accéder au panneau Profils dans les Préférences Système"
}
# Usage
restore_profiles_pane
Gestion de Plusieurs Panneaux de Préférences
#!/bin/bash
# Gérer plusieurs panneaux de préférences simultanément
manage_multiple_panes() {
local action="${1:-hide}" # hide, disable, ou restore
local panes=("${@:2}") # Tableau d'identifiants de panneaux
if [[ ${#panes[@]} -eq 0 ]]; then
echo "Usage : manage_multiple_panes [hide|disable|restore] <panneau1> [panneau2] ..."
echo "Exemple : manage_multiple_panes hide profiles bluetooth network"
return 1
fi
echo "=== Gestion de Plusieurs Panneaux de Préférences ==="
echo "Action : $action"
echo "Panneaux : ${panes[*]}"
echo ""
# Convertir les noms conviviaux en identifiants de bundle
local bundle_ids=()
for pane in "${panes[@]}"; do
local bundle_id=$(get_bundle_identifier "$pane")
if [[ -n "$bundle_id" ]]; then
bundle_ids+=("$bundle_id")
echo "✓ $pane -> $bundle_id"
else
echo "✗ Panneau inconnu : $pane"
fi
done
if [[ ${#bundle_ids[@]} -eq 0 ]]; then
echo "Aucun panneau valide spécifié"
return 1
fi
# Appliquer l'action
case "$action" in
"hide")
defaults write "/Library/Preferences/com.apple.systempreferences" \
HiddenPreferencePanes -array "${bundle_ids[@]}"
echo "✓ Panneaux masqués avec succès"
;;
"disable")
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${bundle_ids[@]}"
echo "✓ Panneaux désactivés avec succès"
;;
"restore")
defaults delete "/Library/Preferences/com.apple.systempreferences" HiddenPreferencePanes 2>/dev/null
defaults delete "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null
echo "✓ Tous les panneaux restaurés"
;;
*)
echo "Action invalide : $action"
return 1
;;
esac
}
# Convertir les noms conviviaux en identifiants de bundle
get_bundle_identifier() {
local pane_name="$1"
case "$pane_name" in
"profiles") echo "com.apple.preferences.configurationprofiles" ;;
"bluetooth") echo "com.apple.preferences.Bluetooth" ;;
"network") echo "com.apple.preference.network" ;;
"security") echo "com.apple.preference.security" ;;
"users") echo "com.apple.preferences.users" ;;
"sharing") echo "com.apple.preferences.sharing" ;;
"timemachine") echo "com.apple.prefs.backup" ;;
"energy") echo "com.apple.preference.energysaver" ;;
"displays") echo "com.apple.preference.displays" ;;
"sound") echo "com.apple.preference.sound" ;;
"keyboard") echo "com.apple.preference.keyboard" ;;
"mouse") echo "com.apple.preference.mouse" ;;
"trackpad") echo "com.apple.preference.trackpad" ;;
"printers") echo "com.apple.preference.printfax" ;;
"software_update") echo "com.apple.preferences.softwareupdate" ;;
"date_time") echo "com.apple.preference.datetime" ;;
"startup_disk") echo "com.apple.preference.startupdisk" ;;
"accessibility") echo "com.apple.preference.universalaccess" ;;
"screen_time") echo "com.apple.preference.screentime" ;;
"extensions") echo "com.apple.preferences.extensions" ;;
"spotlight") echo "com.apple.preference.spotlight" ;;
"language_region") echo "com.apple.Localization" ;;
"desktop_screensaver") echo "com.apple.preference.desktopscreeneffect" ;;
"dock") echo "com.apple.preference.dock" ;;
"mission_control") echo "com.apple.preference.expose" ;;
"notifications") echo "com.apple.preference.notifications" ;;
"internet_accounts") echo "com.apple.preferences.internetaccounts" ;;
"wallet_apple_pay") echo "com.apple.preferences.wallet" ;;
"siri") echo "com.apple.preference.speech" ;;
"touch_id") echo "com.apple.preferences.password" ;;
*) echo "" ;;
esac
}
# Exemples d'utilisation
# manage_multiple_panes hide profiles bluetooth network
# manage_multiple_panes disable security users sharing
# manage_multiple_panes restore
Gestion Avancée des Préférences Système
Gestion des Préférences Basée sur les Politiques
#!/bin/bash
# Gestion des préférences système basée sur les politiques
apply_preference_policy() {
local policy_name="${1:-standard_office}"
local user_role="${2:-standard_user}"
echo "=== Application de Politique de Préférences ==="
echo "Politique : $policy_name"
echo "Rôle Utilisateur : $user_role"
echo ""
# Définir les politiques
case "$policy_name" in
"kiosk_mode")
apply_kiosk_policy "$user_role"
;;
"locked_down")
apply_locked_down_policy "$user_role"
;;
"standard_office")
apply_standard_office_policy "$user_role"
;;
"developer_workstation")
apply_developer_policy "$user_role"
;;
"educational")
apply_educational_policy "$user_role"
;;
"healthcare")
apply_healthcare_policy "$user_role"
;;
"financial")
apply_financial_policy "$user_role"
;;
"public_terminal")
apply_public_terminal_policy "$user_role"
;;
"executive")
apply_executive_policy "$user_role"
;;
"contractor")
apply_contractor_policy "$user_role"
;;
*)
echo "Politique inconnue : $policy_name"
return 1
;;
esac
}
# Politique mode kiosque (restrictions maximales)
apply_kiosk_policy() {
echo "Application de la politique mode kiosque..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preferences.sharing"
"com.apple.preference.network"
"com.apple.prefs.backup"
"com.apple.preferences.softwareupdate"
"com.apple.preference.datetime"
"com.apple.preference.startupdisk"
"com.apple.preferences.extensions"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
HiddenPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique kiosque appliquée - la plupart des préférences masquées"
}
# Politique verrouillée (haute sécurité)
apply_locked_down_policy() {
echo "Application de la politique verrouillée..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preferences.sharing"
"com.apple.prefs.backup"
"com.apple.preferences.softwareupdate"
"com.apple.preference.startupdisk"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique verrouillée appliquée - panneaux sensibles à la sécurité désactivés"
}
# Politique bureau standard (restrictions modérées)
apply_standard_office_policy() {
echo "Application de la politique bureau standard..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preferences.sharing"
"com.apple.preference.startupdisk"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique bureau standard appliquée - restrictions minimales"
}
# Politique poste de développeur (restrictions minimales)
apply_developer_policy() {
echo "Application de la politique poste de développeur..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique développeur appliquée - seule la gestion de profils restreinte"
}
# Politique éducative (restrictions appropriées aux étudiants)
apply_educational_policy() {
echo "Application de la politique éducative..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preferences.sharing"
"com.apple.preferences.softwareupdate"
"com.apple.preference.startupdisk"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
HiddenPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique éducative appliquée - configuration sécurisée pour étudiants"
}
# Politique santé (axée sur la conformité HIPAA)
apply_healthcare_policy() {
echo "Application de la politique santé..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.sharing"
"com.apple.preference.network"
"com.apple.prefs.backup"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique santé appliquée - axée sur la conformité HIPAA"
}
# Politique financière (sécurité renforcée)
apply_financial_policy() {
echo "Application de la politique financière..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preferences.sharing"
"com.apple.preference.network"
"com.apple.prefs.backup"
"com.apple.preferences.extensions"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique financière appliquée - restrictions de sécurité renforcées"
}
# Politique terminal public (protection maximale)
apply_public_terminal_policy() {
echo "Application de la politique terminal public..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preferences.sharing"
"com.apple.preference.network"
"com.apple.prefs.backup"
"com.apple.preferences.softwareupdate"
"com.apple.preference.datetime"
"com.apple.preference.startupdisk"
"com.apple.preferences.extensions"
"com.apple.preference.energysaver"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
HiddenPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique terminal public appliquée - protection maximale"
}
# Politique exécutif (restrictions minimales, accès complet)
apply_executive_policy() {
echo "Application de la politique exécutif..."
# Supprimer toutes les restrictions pour les exécutifs
defaults delete "/Library/Preferences/com.apple.systempreferences" HiddenPreferencePanes 2>/dev/null
defaults delete "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null
echo "✓ Politique exécutif appliquée - accès complet accordé"
}
# Politique contractuel (restrictions d'accès temporaire)
apply_contractor_policy() {
echo "Application de la politique contractuel..."
local restricted_panes=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preferences.sharing"
"com.apple.prefs.backup"
"com.apple.preferences.softwareupdate"
"com.apple.preference.startupdisk"
"com.apple.preferences.extensions"
)
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${restricted_panes[@]}"
echo "✓ Politique contractuel appliquée - restrictions d'accès temporaire"
}
Outil de Gestion des Préférences Système d'Entreprise
#!/bin/bash
# Outil de Gestion des Préférences Système MacFleet
# Contrôle complet des panneaux de préférences et gestion de politiques d'entreprise
# Configuration
SCRIPT_VERSION="1.0.0"
LOG_FILE="/var/log/macfleet_preferences.log"
REPORT_DIR="/etc/macfleet/reports/preferences"
CONFIG_DIR="/etc/macfleet/preferences"
POLICY_DIR="/etc/macfleet/policies/preferences"
BACKUP_DIR="/etc/macfleet/backups/preferences"
# Créer les répertoires s'ils n'existent pas
mkdir -p "$REPORT_DIR" "$CONFIG_DIR" "$POLICY_DIR" "$BACKUP_DIR"
# Mapping complet des panneaux de préférences
declare -A PREFERENCE_PANES=(
["profiles"]="com.apple.preferences.configurationprofiles"
["bluetooth"]="com.apple.preferences.Bluetooth"
["network"]="com.apple.preference.network"
["security"]="com.apple.preference.security"
["users"]="com.apple.preferences.users"
["sharing"]="com.apple.preferences.sharing"
["timemachine"]="com.apple.prefs.backup"
["energy"]="com.apple.preference.energysaver"
["displays"]="com.apple.preference.displays"
["sound"]="com.apple.preference.sound"
["keyboard"]="com.apple.preference.keyboard"
["mouse"]="com.apple.preference.mouse"
["trackpad"]="com.apple.preference.trackpad"
["printers"]="com.apple.preference.printfax"
["software_update"]="com.apple.preferences.softwareupdate"
["date_time"]="com.apple.preference.datetime"
["startup_disk"]="com.apple.preference.startupdisk"
["accessibility"]="com.apple.preference.universalaccess"
["screen_time"]="com.apple.preference.screentime"
["extensions"]="com.apple.preferences.extensions"
["spotlight"]="com.apple.preference.spotlight"
["language_region"]="com.apple.Localization"
["desktop_screensaver"]="com.apple.preference.desktopscreeneffect"
["dock"]="com.apple.preference.dock"
["mission_control"]="com.apple.preference.expose"
["notifications"]="com.apple.preference.notifications"
["internet_accounts"]="com.apple.preferences.internetaccounts"
["wallet_apple_pay"]="com.apple.preferences.wallet"
["siri"]="com.apple.preference.speech"
["touch_id"]="com.apple.preferences.password"
)
# Modèles de politiques d'entreprise
declare -A POLICY_TEMPLATES=(
["kiosk_mode"]="Restrictions maximales pour kiosques publics et affichages"
["locked_down"]="Restrictions de haute sécurité pour environnements sensibles"
["standard_office"]="Restrictions modérées pour environnements de bureau typiques"
["developer_workstation"]="Restrictions minimales pour environnements de développement"
["educational"]="Restrictions appropriées aux étudiants pour institutions éducatives"
["healthcare"]="Restrictions conformes HIPAA pour environnements de santé"
["financial"]="Sécurité renforcée pour environnements de services financiers"
["public_terminal"]="Protection maximale pour terminaux d'accès public"
["executive"]="Restrictions minimales à nulles pour utilisateurs exécutifs"
["contractor"]="Restrictions d'accès temporaire pour travailleurs contractuels"
)
# Cadres de conformité
declare -A COMPLIANCE_FRAMEWORKS=(
["hipaa"]="Health Insurance Portability and Accountability Act"
["sox"]="Conformité Sarbanes-Oxley Act"
["pci_dss"]="Payment Card Industry Data Security Standard"
["ferpa"]="Family Educational Rights and Privacy Act"
["gdpr"]="General Data Protection Regulation"
["nist"]="National Institute of Standards and Technology"
["iso27001"]="International Organization for Standardization 27001"
["cis"]="Center for Internet Security controls"
["fisma"]="Federal Information Security Management Act"
["common_criteria"]="Standard d'évaluation de sécurité Common Criteria"
)
# Fonction de journalisation
log_action() {
local message="$1"
local severity="${2:-INFO}"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] [$severity] $message" | tee -a "$LOG_FILE"
}
# Gestion des préférences système d'entreprise
enterprise_preferences_management() {
local operation="${1:-status}"
local policy_name="${2:-standard_office}"
local target_panes="${3:-}"
local compliance_framework="${4:-}"
log_action "Démarrage gestion préférences d'entreprise" "INFO"
log_action "Opération : $operation, Politique : $policy_name" "INFO"
echo "=== Gestion des Préférences Système d'Entreprise ==="
echo "Opération : $operation"
echo "Politique : $policy_name"
echo "Panneaux Cibles : ${target_panes:-tous_définis_par_politique}"
echo "Cadre de Conformité : ${compliance_framework:-aucun}"
echo "ID de Gestion : $(uuidgen)"
echo ""
# Sauvegarder la configuration actuelle
backup_current_configuration
case "$operation" in
"apply_policy")
apply_enterprise_policy "$policy_name" "$compliance_framework"
;;
"hide_panes")
if [[ -n "$target_panes" ]]; then
hide_specific_panes "$target_panes"
else
echo "Erreur : Aucun panneau cible spécifié pour l'opération de masquage"
return 1
fi
;;
"disable_panes")
if [[ -n "$target_panes" ]]; then
disable_specific_panes "$target_panes"
else
echo "Erreur : Aucun panneau cible spécifié pour l'opération de désactivation"
return 1
fi
;;
"restore_all")
restore_all_preferences
;;
"status")
show_preferences_status
;;
"audit")
perform_preferences_audit "$compliance_framework"
;;
"list_policies")
list_available_policies
;;
"list_panes")
list_available_panes
;;
*)
echo "Opération inconnue : $operation"
return 1
;;
esac
# Générer le rapport de gestion
generate_preferences_report "$operation" "$policy_name" "$target_panes" "$compliance_framework"
log_action "Gestion des préférences d'entreprise terminée" "INFO"
}
# Sauvegarder la configuration actuelle
backup_current_configuration() {
local backup_file="$BACKUP_DIR/preferences_backup_$(date +%Y%m%d_%H%M%S).plist"
echo "--- Création de Sauvegarde de Configuration ---"
# Copier la configuration actuelle des préférences système
if [[ -f "/Library/Preferences/com.apple.systempreferences.plist" ]]; then
cp "/Library/Preferences/com.apple.systempreferences.plist" "$backup_file"
echo "✓ Configuration sauvegardée dans : $backup_file"
log_action "Configuration sauvegardée : $backup_file" "INFO"
else
echo "⚠️ Aucun fichier de configuration existant trouvé"
log_action "Aucun fichier de configuration existant à sauvegarder" "WARNING"
fi
}
# Appliquer la politique d'entreprise avec considérations de conformité
apply_enterprise_policy() {
local policy_name="$1"
local compliance_framework="$2"
echo "--- Application de Politique d'Entreprise ---"
echo "Politique : $policy_name"
echo "Conformité : ${compliance_framework:-aucune}"
# Appliquer la politique de base
case "$policy_name" in
"kiosk_mode")
apply_kiosk_mode_policy
;;
"locked_down")
apply_locked_down_policy
;;
"standard_office")
apply_standard_office_policy
;;
"developer_workstation")
apply_developer_workstation_policy
;;
"educational")
apply_educational_policy
;;
"healthcare")
apply_healthcare_policy
;;
"financial")
apply_financial_policy
;;
"public_terminal")
apply_public_terminal_policy
;;
"executive")
apply_executive_policy
;;
"contractor")
apply_contractor_policy
;;
*)
echo "Politique inconnue : $policy_name"
return 1
;;
esac
# Appliquer les modifications spécifiques à la conformité
if [[ -n "$compliance_framework" ]]; then
apply_compliance_modifications "$compliance_framework"
fi
echo "✓ Politique d'entreprise appliquée avec succès"
}
# Appliquer les modifications spécifiques à la conformité
apply_compliance_modifications() {
local framework="$1"
echo "--- Application de Modifications de Conformité ---"
echo "Cadre : $framework"
case "$framework" in
"hipaa")
apply_hipaa_compliance
;;
"sox")
apply_sox_compliance
;;
"pci_dss")
apply_pci_dss_compliance
;;
"ferpa")
apply_ferpa_compliance
;;
"gdpr")
apply_gdpr_compliance
;;
*)
echo "Cadre de conformité inconnu : $framework"
;;
esac
}
# Modifications de conformité HIPAA
apply_hipaa_compliance() {
echo "Application des modifications de conformité HIPAA..."
# Restrictions supplémentaires pour la protection des données de santé
local hipaa_restricted=(
"com.apple.preferences.sharing"
"com.apple.preference.network"
"com.apple.prefs.backup"
"com.apple.preferences.internetaccounts"
)
# Obtenir les panneaux actuellement désactivés
local current_disabled=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
# Combiner avec les exigences HIPAA
local combined_disabled=($current_disabled "${hipaa_restricted[@]}")
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${combined_disabled[@]}"
echo "✓ Modifications de conformité HIPAA appliquées"
}
# Modifications de conformité SOX
apply_sox_compliance() {
echo "Application des modifications de conformité SOX..."
# Exigences d'audit et de contrôle financier
local sox_restricted=(
"com.apple.preferences.configurationprofiles"
"com.apple.preference.security"
"com.apple.preferences.users"
"com.apple.preference.datetime"
)
# Modèle similaire pour SOX
local current_disabled=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
local combined_disabled=($current_disabled "${sox_restricted[@]}")
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${combined_disabled[@]}"
echo "✓ Modifications de conformité SOX appliquées"
}
# Modifications de conformité PCI DSS
apply_pci_dss_compliance() {
echo "Application des modifications de conformité PCI DSS..."
# Exigences de l'industrie des cartes de paiement
local pci_restricted=(
"com.apple.preferences.sharing"
"com.apple.preference.network"
"com.apple.preference.security"
"com.apple.preferences.extensions"
)
local current_disabled=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
local combined_disabled=($current_disabled "${pci_restricted[@]}")
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${combined_disabled[@]}"
echo "✓ Modifications de conformité PCI DSS appliquées"
}
# Modifications de conformité FERPA
apply_ferpa_compliance() {
echo "Application des modifications de conformité FERPA..."
# Exigences de confidentialité éducative
local ferpa_restricted=(
"com.apple.preferences.sharing"
"com.apple.preferences.internetaccounts"
"com.apple.prefs.backup"
)
local current_disabled=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
local combined_disabled=($current_disabled "${ferpa_restricted[@]}")
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${combined_disabled[@]}"
echo "✓ Modifications de conformité FERPA appliquées"
}
# Modifications de conformité GDPR
apply_gdpr_compliance() {
echo "Application des modifications de conformité GDPR..."
# Exigences de protection des données européennes
local gdpr_restricted=(
"com.apple.preferences.sharing"
"com.apple.prefs.backup"
"com.apple.preferences.internetaccounts"
"com.apple.preference.notifications"
)
local current_disabled=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
local combined_disabled=($current_disabled "${gdpr_restricted[@]}")
defaults write "/Library/Preferences/com.apple.systempreferences" \
DisabledPreferencePanes -array "${combined_disabled[@]}"
echo "✓ Modifications de conformité GDPR appliquées"
}
# Afficher le statut actuel des préférences
show_preferences_status() {
echo "--- Statut des Préférences Système ---"
# Vérifier les panneaux masqués
local hidden_panes=$(defaults read "/Library/Preferences/com.apple.systempreferences" HiddenPreferencePanes 2>/dev/null)
if [[ -n "$hidden_panes" ]]; then
echo "Panneaux Masqués :"
echo "$hidden_panes" | tr -d '(),"' | tr '\n' ' ' | xargs -n1 | while read pane; do
if [[ -n "$pane" ]]; then
local friendly_name=$(get_friendly_name "$pane")
echo " - $friendly_name ($pane)"
fi
done
else
echo "Panneaux Masqués : Aucun"
fi
echo ""
# Vérifier les panneaux désactivés
local disabled_panes=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null)
if [[ -n "$disabled_panes" ]]; then
echo "Panneaux Désactivés :"
echo "$disabled_panes" | tr -d '(),"' | tr '\n' ' ' | xargs -n1 | while read pane; do
if [[ -n "$pane" ]]; then
local friendly_name=$(get_friendly_name "$pane")
echo " - $friendly_name ($pane)"
fi
done
else
echo "Panneaux Désactivés : Aucun"
fi
}
# Obtenir le nom convivial à partir de l'identifiant de bundle
get_friendly_name() {
local bundle_id="$1"
for friendly_name in "${!PREFERENCE_PANES[@]}"; do
if [[ "${PREFERENCE_PANES[$friendly_name]}" == "$bundle_id" ]]; then
echo "$friendly_name"
return
fi
done
echo "inconnu"
}
# Générer un rapport de préférences complet
generate_preferences_report() {
local operation="$1"
local policy_name="$2"
local target_panes="$3"
local compliance_framework="$4"
local report_file="$REPORT_DIR/preferences_report_$(date +%Y%m%d_%H%M%S).json"
# Obtenir la configuration actuelle
local hidden_panes=$(defaults read "/Library/Preferences/com.apple.systempreferences" HiddenPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
local disabled_panes=$(defaults read "/Library/Preferences/com.apple.systempreferences" DisabledPreferencePanes 2>/dev/null | tr -d '(),"' | tr '\n' ' ')
cat > "$report_file" << EOF
{
"preferences_report": {
"report_metadata": {
"report_id": "$(uuidgen)",
"generated_date": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"hostname": "$(hostname)",
"script_version": "$SCRIPT_VERSION",
"macos_version": "$(sw_vers -productVersion)"
},
"operation_details": {
"operation": "$operation",
"policy_name": "$policy_name",
"target_panes": "$target_panes",
"compliance_framework": "$compliance_framework"
},
"current_configuration": {
"hidden_panes": "$hidden_panes",
"disabled_panes": "$disabled_panes",
"total_restrictions": $(echo "$hidden_panes $disabled_panes" | wc -w)
},
"system_information": {
"total_preference_panes": ${#PREFERENCE_PANES[@]},
"available_policies": ${#POLICY_TEMPLATES[@]},
"compliance_frameworks": ${#COMPLIANCE_FRAMEWORKS[@]}
}
}
}
EOF
echo "Rapport de préférences généré : $report_file"
log_action "Rapport de préférences généré : $report_file" "INFO"
}
# Lister les politiques disponibles
list_available_policies() {
echo "--- Politiques d'Entreprise Disponibles ---"
for policy in "${!POLICY_TEMPLATES[@]}"; do
echo " $policy : ${POLICY_TEMPLATES[$policy]}"
done
}
# Lister les panneaux de préférences disponibles
list_available_panes() {
echo "--- Panneaux de Préférences Disponibles ---"
for pane in "${!PREFERENCE_PANES[@]}"; do
echo " $pane : ${PREFERENCE_PANES[$pane]}"
done
}
# Fonction d'exécution principale
main() {
local operation="${1:-help}"
local policy="${2:-}"
local panes="${3:-}"
local compliance="${4:-}"
log_action "=== Gestion des Préférences Système MacFleet Démarrée ===" "INFO"
log_action "Opération : $operation" "INFO"
case "$operation" in
"apply")
if [[ -z "$policy" ]]; then
echo "Usage : $0 apply <nom_politique> [cadre_conformité]"
echo "Politiques disponibles : ${!POLICY_TEMPLATES[*]}"
exit 1
fi
enterprise_preferences_management "apply_policy" "$policy" "" "$compliance"
;;
"hide")
if [[ -z "$panes" ]]; then
echo "Usage : $0 hide <panneau1,panneau2,...>"
echo "Panneaux disponibles : ${!PREFERENCE_PANES[*]}"
exit 1
fi
enterprise_preferences_management "hide_panes" "" "$panes"
;;
"disable")
if [[ -z "$panes" ]]; then
echo "Usage : $0 disable <panneau1,panneau2,...>"
echo "Panneaux disponibles : ${!PREFERENCE_PANES[*]}"
exit 1
fi
enterprise_preferences_management "disable_panes" "" "$panes"
;;
"restore")
enterprise_preferences_management "restore_all"
;;
"status")
enterprise_preferences_management "status"
;;
"audit")
enterprise_preferences_management "audit" "" "" "$policy"
;;
"list-policies")
enterprise_preferences_management "list_policies"
;;
"list-panes")
enterprise_preferences_management "list_panes"
;;
"help")
echo "Usage : $0 [opération] [options...]"
echo "Opérations :"
echo " apply <politique> [conformité] - Appliquer une politique d'entreprise"
echo " hide <panneaux> - Masquer des panneaux de préférences spécifiques"
echo " disable <panneaux> - Désactiver des panneaux de préférences spécifiques"
echo " restore - Restaurer tous les panneaux de préférences"
echo " status - Afficher le statut actuel des préférences"
echo " audit [conformité] - Effectuer un audit de conformité"
echo " list-policies - Lister les politiques disponibles"
echo " list-panes - Lister les panneaux de préférences disponibles"
echo " help - Afficher cette aide"
echo ""
echo "Politiques Disponibles : ${!POLICY_TEMPLATES[*]}"
echo "Cadres de Conformité : ${!COMPLIANCE_FRAMEWORKS[*]}"
;;
*)
log_action "ERREUR : Opération inconnue : $operation" "ERROR"
echo "Utilisez '$0 help' pour les informations d'utilisation"
exit 1
;;
esac
log_action "=== Gestion des préférences système terminée ===" "INFO"
}
# Exécuter la fonction principale
main "$@"
Considérations Importantes
Compatibilité des Versions macOS
- Masquage des Panneaux : Nécessite macOS 13.0 ou ultérieur (
HiddenPreferencePanes
) - Désactivation des Panneaux : Fonctionne sur macOS 10.2 et ultérieur (
DisabledPreferencePanes
) - Identifiants de Bundle : Peuvent changer entre les versions macOS
- Protection d'Intégrité Système : Certaines restrictions peuvent ne pas s'appliquer avec SIP activé
Notes de Déploiement d'Entreprise
- Impact Utilisateur : Les panneaux masqués/désactivés affectent tous les utilisateurs sur l'appareil
- Accès Administratif : Les modifications nécessitent des privilèges administrateur
- Test de Politiques : Toujours tester les politiques sur des appareils non-production d'abord
- Sauvegarde et Récupération : Maintenir des sauvegardes de configuration pour le rollback de politique
Considérations de Sécurité et Conformité
- Principe du Moindre Privilège : Restreindre l'accès uniquement aux panneaux de préférences nécessaires
- Journalisation d'Audit : Tous les changements de préférences doivent être journalisés pour la conformité
- Cadres de Conformité : Différentes industries nécessitent des restrictions spécifiques
- Formation Utilisateur : Informer les utilisateurs sur les fonctionnalités restreintes et les alternatives