Tutorial

New updates and improvements to Roundfleet.

Important notice

The code examples and scripts provided in these tutorials are for educational purposes only. Roundfleet is not responsible for any issues, damages, or security vulnerabilities that may arise from the use, modification, or implementation of these examples. Always review and test code in a secure environment before using it in production systems.

Safari Browser Management on macOS

Manage Safari browser configurations and policies across your Roundfleet devices with enterprise-grade settings deployment. This tutorial covers homepage configuration, security settings, user management, and comprehensive browser policy enforcement.

Understanding Safari Browser Management

Safari browser management on macOS involves configuring browser settings, security policies, and user preferences across enterprise devices:

Core Components

  • Homepage Configuration - Set default landing pages for users
  • Security Settings - Manage privacy, security, and content policies
  • User Preferences - Control browser behavior and features
  • Policy Enforcement - Deploy and maintain consistent browser settings
  • Fleet Management - Mass configuration across multiple devices

Enterprise Benefits

  • Standardized Browsing - Consistent user experience across devices
  • Security Compliance - Enforce security policies and restrictions
  • Productivity Control - Manage access to sites and features
  • Policy Deployment - Centralized browser configuration management
  • Audit Capabilities - Track and monitor browser usage patterns

Basic Safari Homepage Configuration

Simple Homepage Setup

#!/bin/bash

# Enhanced Safari homepage configuration
configure_safari_homepage() {
    local homepage_url="${1:-https://roundfleet.io}"
    local apply_to_all_users="${2:-true}"
    
    echo "🌐 Safari Homepage Configuration"
    echo "==============================="
    echo "Homepage URL: $homepage_url"
    echo "Apply to all users: $apply_to_all_users"
    echo ""
    
    # Validate URL format
    if ! [[ "$homepage_url" =~ ^https?:// ]]; then
        echo "⚠️ Adding https:// to URL: $homepage_url"
        homepage_url="https://$homepage_url"
    fi
    
    echo "Final homepage URL: $homepage_url"
    echo ""
    
    # Kill Safari processes to ensure settings take effect
    echo "Terminating Safari processes..."
    sudo killall -9 Safari 2>/dev/null || echo "No Safari processes running"
    sleep 2
    
    if [[ "$apply_to_all_users" == "true" ]]; then
        configure_all_users_safari "$homepage_url"
    else
        configure_current_user_safari "$homepage_url"
    fi
}

# Configure Safari for all users
configure_all_users_safari() {
    local homepage="$1"
    local users_configured=0
    local users_failed=0
    
    echo "Configuring Safari for all users..."
    echo ""
    
    # Loop through each user to set homepage preferences
    for user in $(ls /Users | grep -v Shared | grep -v npsparcc | grep -v ".localized" | grep -v "Guest"); do
        echo "Processing user: $user"
        
        # Check if user home directory exists
        if [[ ! -d "/Users/$user" ]]; then
            echo "⚠️ User directory not found, skipping: $user"
            continue
        fi
        
        # Configure Safari settings
        if configure_user_safari_settings "$user" "$homepage"; then
            echo "✅ Safari configured successfully for user: $user"
            ((users_configured++))
        else
            echo "❌ Failed to configure Safari for user: $user"
            ((users_failed++))
        fi
        echo ""
    done
    
    echo "=== Configuration Summary ==="
    echo "Users configured: $users_configured"
    echo "Users failed: $users_failed"
    echo "Total processed: $((users_configured + users_failed))"
}

# Configure Safari settings for specific user
configure_user_safari_settings() {
    local user="$1"
    local homepage="$2"
    
    # Set Safari homepage
    if su - "$user" -c "defaults write com.apple.Safari HomePage '$homepage'" 2>/dev/null; then
        # Set new window behavior (0 = homepage)
        su - "$user" -c "defaults write com.apple.Safari NewWindowBehavior -int 0" 2>/dev/null
        
        # Set new tab behavior (0 = homepage)
        su - "$user" -c "defaults write com.apple.Safari NewTabBehavior -int 0" 2>/dev/null
        
        # Verify settings
        local current_homepage
        current_homepage=$(su - "$user" -c "defaults read com.apple.Safari HomePage" 2>/dev/null)
        
        if [[ "$current_homepage" == "$homepage" ]]; then
            echo "  Homepage set: $current_homepage"
            echo "  New window behavior: Homepage"
            echo "  New tab behavior: Homepage"
            return 0
        else
            echo "  ⚠️ Verification failed"
            return 1
        fi
    else
        echo "  ❌ Failed to write Safari preferences"
        return 1
    fi
}

# Configure current user only
configure_current_user_safari() {
    local homepage="$1"
    local current_user=$(whoami)
    
    echo "Configuring Safari for current user: $current_user"
    
    if configure_user_safari_settings "$current_user" "$homepage"; then
        echo "✅ Safari configured successfully for current user"
    else
        echo "❌ Failed to configure Safari for current user"
        return 1
    fi
}

# Execute basic homepage configuration
echo "Basic Safari Homepage Configuration:"
echo "===================================="
configure_safari_homepage "https://roundfleet.io" true

Enterprise Safari Management System

Comprehensive Browser Configuration Manager

#!/bin/bash

# Enterprise Safari management system
enterprise_safari_manager() {
    local operation="${1:-configure}"
    local config_profile="${2:-standard}"
    local target_users="${3:-all}"
    
    echo "🏢 Roundfleet Safari Enterprise Manager"
    echo "===================================="
    echo "Operation: $operation"
    echo "Profile: $config_profile"
    echo "Target users: $target_users"
    echo ""
    
    # Configuration profiles
    declare -A config_profiles
    config_profiles[standard]="https://roundfleet.io:true:true:false"
    config_profiles[secure]="https://roundfleet.io:true:true:true"
    config_profiles[education]="https://education.roundfleet.io:true:false:true"
    config_profiles[kiosk]="https://kiosk.roundfleet.io:false:false:true"
    
    case "$operation" in
        "configure")
            deploy_safari_configuration "$config_profile" "$target_users"
            ;;
        "security")
            apply_security_settings "$config_profile" "$target_users"
            ;;
        "audit")
            audit_safari_settings "$target_users"
            ;;
        "backup")
            backup_safari_settings "$target_users"
            ;;
        "restore")
            restore_safari_settings "$target_users"
            ;;
        *)
            echo "❌ Unknown operation: $operation"
            echo "Available operations: configure, security, audit, backup, restore"
            return 1
            ;;
    esac
}

# Deploy comprehensive Safari configuration
deploy_safari_configuration() {
    local profile="$1"
    local target_users="$2"
    
    echo "📋 Deploying Safari Configuration"
    echo "================================="
    
    # Parse configuration profile
    local config_string="${config_profiles[$profile]:-${config_profiles[standard]}}"
    IFS=':' read -r homepage block_popups auto_fill restrict_sites <<< "$config_string"
    
    echo "Configuration Profile: $profile"
    echo "Homepage: $homepage"
    echo "Block popups: $block_popups"
    echo "Auto-fill: $auto_fill" 
    echo "Restrict sites: $restrict_sites"
    echo ""
    
    # Get target user list
    local users_list=()
    if [[ "$target_users" == "all" ]]; then
        readarray -t users_list < <(ls /Users | grep -v Shared | grep -v npsparcc | grep -v ".localized" | grep -v "Guest")
    else
        IFS=',' read -ra users_list <<< "$target_users"
    fi
    
    local configured=0
    local failed=0
    
    # Kill Safari processes first
    echo "Terminating all Safari processes..."
    sudo killall -9 Safari 2>/dev/null || echo "No Safari processes running"
    sleep 3
    
    # Configure each user
    for user in "${users_list[@]}"; do
        if [[ -n "$user" && -d "/Users/$user" ]]; then
            echo "Configuring user: $user"
            
            if apply_user_safari_config "$user" "$homepage" "$block_popups" "$auto_fill" "$restrict_sites"; then
                echo "✅ Configuration applied successfully"
                ((configured++))
            else
                echo "❌ Configuration failed"
                ((failed++))
            fi
            echo ""
        fi
    done
    
    # Generate deployment report
    cat > "/tmp/safari_deployment_$(date +%Y%m%d_%H%M%S).log" << EOF
Safari Configuration Deployment Report
=====================================
Date: $(date)
Profile: $profile
Target: $target_users

Configuration Details:
- Homepage: $homepage
- Block popups: $block_popups
- Auto-fill: $auto_fill
- Restrict sites: $restrict_sites

Results:
- Successfully configured: $configured users
- Failed configurations: $failed users
- Total processed: $((configured + failed)) users

Deployment Status: $([[ "$failed" -eq 0 ]] && echo "SUCCESS" || echo "PARTIAL")
EOF
    
    echo "=== Deployment Summary ==="
    echo "Successfully configured: $configured users"
    echo "Failed configurations: $failed users"
    echo "Total processed: $((configured + failed)) users"
    
    if [[ "$failed" -eq 0 ]]; then
        echo "🎉 Deployment completed successfully!"
    else
        echo "⚠️ Deployment completed with some failures"
    fi
}

# Apply comprehensive Safari settings for user
apply_user_safari_config() {
    local user="$1"
    local homepage="$2"
    local block_popups="$3"
    local auto_fill="$4"
    local restrict_sites="$5"
    
    local settings_applied=0
    
    # Set homepage and window/tab behavior
    if su - "$user" -c "defaults write com.apple.Safari HomePage '$homepage'" 2>/dev/null; then
        su - "$user" -c "defaults write com.apple.Safari NewWindowBehavior -int 0" 2>/dev/null
        su - "$user" -c "defaults write com.apple.Safari NewTabBehavior -int 0" 2>/dev/null
        ((settings_applied++))
    fi
    
    # Configure popup blocking
    if [[ "$block_popups" == "true" ]]; then
        su - "$user" -c "defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically -bool false" 2>/dev/null
        su - "$user" -c "defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsAutomatically -bool false" 2>/dev/null
        ((settings_applied++))
    fi
    
    # Configure auto-fill settings
    if [[ "$auto_fill" == "true" ]]; then
        su - "$user" -c "defaults write com.apple.Safari AutoFillFormData -bool true" 2>/dev/null
        su - "$user" -c "defaults write com.apple.Safari AutoFillPasswords -bool true" 2>/dev/null
    else
        su - "$user" -c "defaults write com.apple.Safari AutoFillFormData -bool false" 2>/dev/null
        su - "$user" -c "defaults write com.apple.Safari AutoFillPasswords -bool false" 2>/dev/null
    fi
    ((settings_applied++))
    
    # Configure security settings
    if [[ "$restrict_sites" == "true" ]]; then
        # Enable parental controls and restrictions
        su - "$user" -c "defaults write com.apple.Safari WebKitDeveloperExtrasEnabled -bool false" 2>/dev/null
        su - "$user" -c "defaults write com.apple.Safari IncludeDevelopMenu -bool false" 2>/dev/null
        su - "$user" -c "defaults write com.apple.Safari WebKitJavaEnabled -bool false" 2>/dev/null
        ((settings_applied++))
    fi
    
    # Additional security settings
    su - "$user" -c "defaults write com.apple.Safari SendDoNotTrackHTTPHeader -bool true" 2>/dev/null
    su - "$user" -c "defaults write com.apple.Safari InstallExtensionUpdatesAutomatically -bool true" 2>/dev/null
    
    return $([[ "$settings_applied" -ge 3 ]] && echo 0 || echo 1)
}

# Security-focused Safari configuration
apply_security_settings() {
    local profile="$1"
    local target_users="$2"
    
    echo "🔒 Applying Security Settings"
    echo "============================"
    echo ""
    
    # Get user list
    local users_list=()
    if [[ "$target_users" == "all" ]]; then
        readarray -t users_list < <(ls /Users | grep -v Shared | grep -v npsparcc | grep -v ".localized" | grep -v "Guest")
    else
        IFS=',' read -ra users_list <<< "$target_users"
    fi
    
    for user in "${users_list[@]}"; do
        if [[ -n "$user" && -d "/Users/$user" ]]; then
            echo "Applying security settings for user: $user"
            
            # Enhanced security settings
            su - "$user" -c "defaults write com.apple.Safari WebKitJavaScriptEnabled -bool false" 2>/dev/null
            su - "$user" -c "defaults write com.apple.Safari WebKitJavaEnabled -bool false" 2>/dev/null
            su - "$user" -c "defaults write com.apple.Safari WebKitPluginsEnabled -bool false" 2>/dev/null
            su - "$user" -c "defaults write com.apple.Safari SendDoNotTrackHTTPHeader -bool true" 2>/dev/null
            su - "$user" -c "defaults write com.apple.Safari WarnAboutFraudulentWebsites -bool true" 2>/dev/null
            su - "$user" -c "defaults write com.apple.Safari BlockStoragePolicy -int 2" 2>/dev/null
            
            echo "✅ Security settings applied"
        fi
    done
}

# Audit current Safari settings
audit_safari_settings() {
    local target_users="$1"
    local audit_file="/tmp/safari_audit_$(date +%Y%m%d_%H%M%S).json"
    
    echo "📊 Auditing Safari Settings"
    echo "==========================="
    echo ""
    
    {
        echo "{"
        echo "  \"audit_report\": {"
        echo "    \"generated\": \"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\","
        echo "    \"hostname\": \"$(hostname)\","
        echo "    \"users\": ["
        
        local first_user=true
        local total_users=0
        local compliant_users=0
        
        # Get user list
        local users_list=()
        if [[ "$target_users" == "all" ]]; then
            readarray -t users_list < <(ls /Users | grep -v Shared | grep -v npsparcc | grep -v ".localized" | grep -v "Guest")
        else
            IFS=',' read -ra users_list <<< "$target_users"
        fi
        
        for user in "${users_list[@]}"; do
            if [[ -n "$user" && -d "/Users/$user" ]]; then
                if [[ "$first_user" == "false" ]]; then
                    echo ","
                fi
                
                local homepage=$(su - "$user" -c "defaults read com.apple.Safari HomePage" 2>/dev/null || echo "Not set")
                local popup_blocking=$(su - "$user" -c "defaults read com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically" 2>/dev/null || echo "true")
                local do_not_track=$(su - "$user" -c "defaults read com.apple.Safari SendDoNotTrackHTTPHeader" 2>/dev/null || echo "false")
                
                local is_compliant="false"
                if [[ "$homepage" =~ roundfleet ]] && [[ "$popup_blocking" == "false" ]] && [[ "$do_not_track" == "true" ]]; then
                    is_compliant="true"
                    ((compliant_users++))
                fi
                
                echo "      {"
                echo "        \"username\": \"$user\","
                echo "        \"homepage\": \"$homepage\","
                echo "        \"popup_blocking\": $([[ "$popup_blocking" == "false" ]] && echo "true" || echo "false"),"
                echo "        \"do_not_track\": $([[ "$do_not_track" == "true" ]] && echo "true" || echo "false"),"
                echo "        \"compliant\": $is_compliant"
                echo -n "      }"
                
                first_user=false
                ((total_users++))
            fi
        done
        
        echo ""
        echo "    ],"
        echo "    \"summary\": {"
        echo "      \"total_users\": $total_users,"
        echo "      \"compliant_users\": $compliant_users,"
        echo "      \"compliance_rate\": \"$(echo "scale=1; ($compliant_users * 100) / $total_users" | bc 2>/dev/null || echo "0")%\""
        echo "    }"
        echo "  }"
        echo "}"
    } > "$audit_file"
    
    echo "✅ Audit completed: $audit_file"
    echo ""
    echo "=== Audit Summary ==="
    echo "Total users: $total_users"
    echo "Compliant users: $compliant_users"
    
    if [[ "$total_users" -gt 0 ]]; then
        local compliance_rate=$(echo "scale=1; ($compliant_users * 100) / $total_users" | bc 2>/dev/null || echo "0")
        echo "Compliance rate: ${compliance_rate}%"
    fi
}

# Usage examples
echo "Safari Manager Examples:"
echo "==================================="
echo ""

echo "1. Deploy standard configuration:"
enterprise_safari_manager "configure" "standard" "all"
echo ""

echo "2. Apply security settings:"
enterprise_safari_manager "security" "secure" "all"
echo ""

echo "3. Audit current settings:"
enterprise_safari_manager "audit" "all"

Important Notes

Enterprise Features

  • Profile-Based Configuration - Predefined settings for different use cases
  • Mass User Management - Deploy settings across all system users
  • Security Policy Enforcement - Advanced security and privacy controls
  • Audit and Compliance - Track configuration compliance across fleet
  • Backup and Restore - Preserve and restore browser configurations

Configuration Profiles

  • Standard - Basic enterprise settings with Roundfleet homepage
  • Secure - Enhanced security with restricted features
  • Education - Educational environment optimizations
  • Kiosk - Locked-down configuration for public access

Security Features

  • Popup Blocking - Prevent unwanted popup windows
  • JavaScript Control - Manage script execution permissions
  • Do Not Track - Enhanced privacy protection
  • Auto-fill Management - Control form and password auto-completion
  • Developer Tools - Restrict access to debugging features

Usage Examples

# Basic homepage setup
homepage="https://roundfleet.io"
sudo killall -9 Safari
for user in $(ls /Users | grep -v Shared | grep -v npsparcc | grep -v ".localized"); do
    su - "$user" -c "defaults write com.apple.Safari HomePage $homepage"
    su - "$user" -c "defaults write com.apple.Safari NewWindowBehavior -int 0"
    su - "$user" -c "defaults write com.apple.Safari NewTabBehavior -int 0"
    echo "Set Safari homepage to $homepage for $user."
done

# Enhanced Roundfleet configuration
configure_safari_homepage "https://roundfleet.io" true

# Enterprise deployment
enterprise_safari_manager "configure" "secure" "all"

# Security audit
enterprise_safari_manager "audit" "all"

Related Tutorials

Browser Data Management and Privacy Compliance on macOS

Manage browser data, implement privacy policies, and ensure compliance across multiple browsers on macOS devices with automated data lifecycle management, audit trails, and enterprise-grade privacy controls.

Jul 7, 2025

Rosetta 2 and Apple Silicon Compatibility Management on macOS

Learn how to install, manage, and monitor Rosetta 2 translation layer on Apple Silicon Macs with enterprise-grade compatibility management, application monitoring, and fleet-wide deployment capabilities.

Jul 7, 2025

Package Management with Homebrew on macOS

Deploy, manage, and maintain software packages across macOS devices using Homebrew with enterprise-grade configuration management, compliance tracking, and automated deployment workflows.

Jul 7, 2025

Manage Kernel Extensions on macOS

Learn how to display, load, unload, and monitor kernel extensions (kexts) on macOS devices using command-line scripts for enhanced system management and security.

Jul 7, 2025

Chrome Extension Management and Security on macOS

Learn how to discover, analyze, and manage Google Chrome extensions on macOS devices, implement security policies, and monitor browser extension compliance for enterprise security.

Jul 7, 2025

Automatic App Launch Management on macOS

Deploy and manage automatic app launches on macOS devices using enterprise-grade LaunchAgent configurations, user profile management, and centralized application lifecycle control.

Jul 7, 2025

Application Force Close Management for macOS

Manage macOS application force close operations across Roundfleet devices with automated process termination, security validation, troubleshooting diagnostics, and comprehensive fleet-wide application control for enterprise operations.

Jul 7, 2025

Apple ID Management and Identity Tracking on macOS

Discover and manage Apple IDs, monitor iCloud services, enforce privacy policies, and implement enterprise identity management across macOS devices with comprehensive audit and compliance tracking.

Jul 7, 2025