Tutorial

Novas atualizações e melhorias para a Macfleet.

Aviso importante

Os exemplos de código e scripts fornecidos nestes tutoriais são apenas para fins educacionais. A Macfleet não é responsável por quaisquer problemas, danos ou vulnerabilidades de segurança que possam surgir do uso, modificação ou implementação destes exemplos. Sempre revise e teste o código em um ambiente seguro antes de usá-lo em sistemas de produção.

Screen Lock Security on macOS

Implement comprehensive screen lock security policies across your MacFleet devices using AppleScript automation and advanced security configurations. This tutorial covers password enforcement, sleep security management, and enterprise-grade lock mechanisms.

Understanding macOS Screen Lock Security

macOS provides multiple layers of screen lock security:

  • Screen Saver Password - Requires password when returning from screen saver
  • Sleep Password - Requires password when waking from sleep mode
  • Immediate Lock - Sets password requirement timing to immediate
  • Security Preferences - System-level security configuration management

Basic Screen Lock Configuration

Enable Password for Screen Lock

#!/bin/bash

# Basic screen lock password enablement
enable_screen_lock_password() {
    echo "=== Enabling Screen Lock Password ==="
    
    # Enable password requirement for screen lock using AppleScript
    if osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'; then
        echo "✅ Screen lock password enabled successfully"
        
        # Verify the setting
        local current_setting=$(osascript -e 'tell application "System Events" to get require password to wake of security preferences')
        if [[ "$current_setting" == "true" ]]; then
            echo "✅ Password requirement verified: enabled"
        else
            echo "⚠️  Password requirement verification failed"
        fi
    else
        echo "❌ Failed to enable screen lock password"
        return 1
    fi
}

enable_screen_lock_password

Check Current Screen Lock Status

#!/bin/bash

# Check current screen lock password status
check_screen_lock_status() {
    echo "=== Screen Lock Status Check ==="
    
    # Get current password requirement status
    local password_required=$(osascript -e 'tell application "System Events" to get require password to wake of security preferences' 2>/dev/null)
    
    if [[ "$password_required" == "true" ]]; then
        echo "✅ Screen lock password: ENABLED"
    elif [[ "$password_required" == "false" ]]; then
        echo "❌ Screen lock password: DISABLED"
    else
        echo "⚠️  Screen lock password status: UNKNOWN"
    fi
    
    # Get screen saver timeout settings
    local saver_timeout=$(defaults read com.apple.screensaver idleTime 2>/dev/null || echo "Unknown")
    echo "Screen saver timeout: $saver_timeout seconds"
    
    # Get display sleep timeout
    local display_sleep=$(pmset -g | grep displaysleep | awk '{print $2}')
    echo "Display sleep timeout: $display_sleep minutes"
    
    # Get system sleep timeout
    local system_sleep=$(pmset -g | grep sleep | grep -v displaysleep | awk '{print $2}')
    echo "System sleep timeout: $system_sleep minutes"
}

check_screen_lock_status

Advanced Security Configuration

Comprehensive Screen Lock Setup

#!/bin/bash

# Advanced screen lock security configuration
configure_advanced_screen_lock() {
    local timeout_minutes="${1:-5}"
    local grace_period="${2:-0}"
    
    echo "=== Advanced Screen Lock Configuration ==="
    echo "Timeout: $timeout_minutes minutes"
    echo "Grace period: $grace_period seconds"
    
    # Enable password requirement for screen lock
    echo "Enabling password requirement..."
    if osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'; then
        echo "✅ Password requirement enabled"
    else
        echo "❌ Failed to enable password requirement"
        return 1
    fi
    
    # Set password delay (grace period)
    echo "Setting password delay..."
    if osascript -e "tell application \"System Events\" to set delay interval of security preferences to $grace_period"; then
        echo "✅ Password delay set to $grace_period seconds"
    else
        echo "⚠️  Password delay setting may have failed"
    fi
    
    # Configure screen saver timeout
    echo "Configuring screen saver timeout..."
    local timeout_seconds=$((timeout_minutes * 60))
    defaults write com.apple.screensaver idleTime -int $timeout_seconds
    
    # Enable screen saver password immediately
    defaults write com.apple.screensaver askForPassword -int 1
    defaults write com.apple.screensaver askForPasswordDelay -int $grace_period
    
    # Configure system sleep settings
    echo "Configuring power management..."
    sudo pmset -a displaysleep $timeout_minutes
    sudo pmset -a sleep $((timeout_minutes + 5))
    
    # Apply hot corners for immediate lock (optional)
    configure_hot_corners
    
    echo "✅ Advanced screen lock configuration completed"
}

# Configure hot corners for security
configure_hot_corners() {
    echo "Configuring security hot corners..."
    
    # Bottom right corner: Start screen saver
    defaults write com.apple.dock wvous-br-corner -int 5
    defaults write com.apple.dock wvous-br-modifier -int 0
    
    # Top right corner: Put display to sleep
    defaults write com.apple.dock wvous-tr-corner -int 10
    defaults write com.apple.dock wvous-tr-modifier -int 0
    
    # Restart Dock to apply changes
    killall Dock
    
    echo "✅ Hot corners configured for enhanced security"
}

# Usage: configure_advanced_screen_lock 3 0
configure_advanced_screen_lock

Security Policy Enforcement

#!/bin/bash

# Enforce enterprise security policies
enforce_security_policies() {
    echo "=== Security Policy Enforcement ==="
    
    # Disable automatic login
    echo "Disabling automatic login..."
    sudo defaults delete /Library/Preferences/com.apple.loginwindow autoLoginUser 2>/dev/null || true
    
    # Enable fast user switching menu
    echo "Configuring user switching..."
    sudo defaults write /Library/Preferences/.GlobalPreferences MultipleSessionEnabled -bool YES
    defaults write .GlobalPreferences userMenuExtraStyle -int 2
    
    # Disable guest account
    echo "Disabling guest account..."
    sudo defaults write /Library/Preferences/com.apple.loginwindow GuestEnabled -bool NO
    
    # Set login window to show name and password fields
    sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWFULLNAME -bool YES
    
    # Hide admin users from login window
    sudo defaults write /Library/Preferences/com.apple.loginwindow Hide500Users -bool YES
    
    # Disable password hints
    sudo defaults write /Library/Preferences/com.apple.loginwindow RetriesUntilHint -int 0
    
    # Enable secure virtual memory
    sudo defaults write /Library/Preferences/com.apple.virtualMemory UseEncryptedSwap -bool YES
    
    echo "✅ Security policies enforced"
}

enforce_security_policies

Screen Saver and Lock Management

Screen Saver Configuration

#!/bin/bash

# Configure screen saver with security settings
configure_secure_screensaver() {
    local module_name="${1:-Flurry}"
    local timeout_minutes="${2:-5}"
    
    echo "=== Secure Screen Saver Configuration ==="
    echo "Module: $module_name"
    echo "Timeout: $timeout_minutes minutes"
    
    # Set screen saver module
    defaults -currentHost write com.apple.screensaver moduleDict -dict \
        moduleName "$module_name" \
        path "/System/Library/Screen Savers/$module_name.saver" \
        type 0
    
    # Set timeout
    local timeout_seconds=$((timeout_minutes * 60))
    defaults write com.apple.screensaver idleTime -int $timeout_seconds
    
    # Enable password immediately
    defaults write com.apple.screensaver askForPassword -int 1
    defaults write com.apple.screensaver askForPasswordDelay -int 0
    
    # Disable screen saver preview
    defaults write com.apple.screensaver showClock -bool NO
    
    # Set message on lock screen (optional)
    set_lock_screen_message
    
    echo "✅ Secure screen saver configured"
}

# Set custom lock screen message
set_lock_screen_message() {
    local message="${1:-This device is managed by MacFleet. Unauthorized access is prohibited.}"
    
    echo "Setting lock screen message..."
    defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "$message"
    
    echo "✅ Lock screen message set"
}

# Usage: configure_secure_screensaver "Flurry" 3
configure_secure_screensaver

Manual Lock Mechanisms

#!/bin/bash

# Immediate lock mechanisms
immediate_lock_functions() {
    echo "=== Immediate Lock Mechanisms ==="
    
    # Method 1: Using pmset to sleep display
    lock_display_pmset() {
        echo "Locking display using pmset..."
        pmset displaysleepnow
    }
    
    # Method 2: Using osascript to activate screen saver
    lock_screensaver() {
        echo "Activating screen saver lock..."
        osascript -e 'tell application "System Events" to start current screen saver'
    }
    
    # Method 3: Using CGSession for fast user switching
    lock_fast_user_switch() {
        echo "Switching to login window..."
        /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
    }
    
    # Method 4: Using open command with screen saver
    lock_open_screensaver() {
        echo "Opening screen saver module..."
        open -a ScreenSaverEngine
    }
    
    # Default lock method
    lock_display_pmset
}

immediate_lock_functions

Enterprise Lock Management System

#!/bin/bash

# MacFleet Enterprise Screen Lock Management System
# Comprehensive security policy enforcement and monitoring

# Configuration
SECURITY_CONFIG_FILE="/etc/macfleet/screen_lock_config.conf"
LOG_FILE="/var/log/macfleet_screen_lock.log"
STATUS_FILE="/var/log/macfleet_security_status.json"

# Default security settings
DEFAULT_SCREEN_TIMEOUT=300    # 5 minutes
DEFAULT_GRACE_PERIOD=0        # Immediate
DEFAULT_DISPLAY_SLEEP=5       # 5 minutes
DEFAULT_SYSTEM_SLEEP=10       # 10 minutes

# Logging function
log_action() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# Load security configuration
load_security_config() {
    if [[ -f "$SECURITY_CONFIG_FILE" ]]; then
        source "$SECURITY_CONFIG_FILE"
        log_action "Loaded security configuration from $SECURITY_CONFIG_FILE"
    else
        log_action "Using default security configuration"
    fi
}

# Apply enterprise screen lock policies
apply_enterprise_policies() {
    log_action "Applying enterprise screen lock policies"
    
    # Enable password requirement for screen lock
    log_action "Enabling screen lock password requirement"
    if osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'; then
        log_action "✅ Screen lock password requirement enabled"
    else
        log_action "❌ Failed to enable screen lock password requirement"
        return 1
    fi
    
    # Set password delay
    local grace_period="${GRACE_PERIOD:-$DEFAULT_GRACE_PERIOD}"
    log_action "Setting password grace period to $grace_period seconds"
    osascript -e "tell application \"System Events\" to set delay interval of security preferences to $grace_period" 2>/dev/null
    
    # Configure screen saver settings
    local screen_timeout="${SCREEN_TIMEOUT:-$DEFAULT_SCREEN_TIMEOUT}"
    log_action "Setting screen saver timeout to $screen_timeout seconds"
    defaults write com.apple.screensaver idleTime -int $screen_timeout
    defaults write com.apple.screensaver askForPassword -int 1
    defaults write com.apple.screensaver askForPasswordDelay -int $grace_period
    
    # Configure power management
    local display_sleep="${DISPLAY_SLEEP:-$DEFAULT_DISPLAY_SLEEP}"
    local system_sleep="${SYSTEM_SLEEP:-$DEFAULT_SYSTEM_SLEEP}"
    
    log_action "Configuring power management: display=$display_sleep min, system=$system_sleep min"
    sudo pmset -a displaysleep $display_sleep
    sudo pmset -a sleep $system_sleep
    sudo pmset -a halfdim 1
    
    # Apply additional security settings
    apply_additional_security_settings
    
    log_action "screen lock policies applied successfully"
}

# Apply additional security settings
apply_additional_security_settings() {
    log_action "Applying additional security settings"
    
    # Disable automatic login
    sudo defaults delete /Library/Preferences/com.apple.loginwindow autoLoginUser 2>/dev/null || true
    
    # Disable guest account
    sudo defaults write /Library/Preferences/com.apple.loginwindow GuestEnabled -bool NO
    
    # Set login window to show name and password fields
    sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWFULLNAME -bool YES
    
    # Hide admin users from login window
    sudo defaults write /Library/Preferences/com.apple.loginwindow Hide500Users -bool YES
    
    # Disable password hints
    sudo defaults write /Library/Preferences/com.apple.loginwindow RetriesUntilHint -int 0
    
    # Enable secure virtual memory
    sudo defaults write /Library/Preferences/com.apple.virtualMemory UseEncryptedSwap -bool YES
    
    # Set lock screen message if configured
    if [[ -n "${LOCK_SCREEN_MESSAGE}" ]]; then
        defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "$LOCK_SCREEN_MESSAGE"
        log_action "Set lock screen message"
    fi
    
    log_action "Additional security settings applied"
}

# Monitor screen lock compliance
monitor_screen_lock_compliance() {
    log_action "Monitoring screen lock compliance"
    
    local compliance_issues=0
    local timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ)
    
    # Check password requirement
    local password_required=$(osascript -e 'tell application "System Events" to get require password to wake of security preferences' 2>/dev/null)
    local password_compliant=false
    
    if [[ "$password_required" == "true" ]]; then
        password_compliant=true
        log_action "✅ Password requirement: compliant"
    else
        ((compliance_issues++))
        log_action "❌ Password requirement: non-compliant"
    fi
    
    # Check screen saver timeout
    local current_timeout=$(defaults read com.apple.screensaver idleTime 2>/dev/null || echo "0")
    local timeout_compliant=false
    local max_allowed_timeout="${MAX_SCREEN_TIMEOUT:-600}"  # 10 minutes default
    
    if [[ "$current_timeout" -le "$max_allowed_timeout" && "$current_timeout" -gt 0 ]]; then
        timeout_compliant=true
        log_action "✅ Screen saver timeout: compliant ($current_timeout seconds)"
    else
        ((compliance_issues++))
        log_action "❌ Screen saver timeout: non-compliant ($current_timeout seconds)"
    fi
    
    # Check password delay
    local password_delay=$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null || echo "300")
    local delay_compliant=false
    local max_allowed_delay="${MAX_PASSWORD_DELAY:-60}"  # 1 minute default
    
    if [[ "$password_delay" -le "$max_allowed_delay" ]]; then
        delay_compliant=true
        log_action "✅ Password delay: compliant ($password_delay seconds)"
    else
        ((compliance_issues++))
        log_action "❌ Password delay: non-compliant ($password_delay seconds)"
    fi
    
    # Check guest account status
    local guest_enabled=$(sudo defaults read /Library/Preferences/com.apple.loginwindow GuestEnabled 2>/dev/null || echo "true")
    local guest_compliant=false
    
    if [[ "$guest_enabled" == "0" || "$guest_enabled" == "false" ]]; then
        guest_compliant=true
        log_action "✅ Guest account: disabled (compliant)"
    else
        ((compliance_issues++))
        log_action "❌ Guest account: enabled (non-compliant)"
    fi
    
    # Generate compliance report
    local compliance_status='{
        "timestamp": "'$timestamp'",
        "device_id": "'$(system_profiler SPHardwareDataType | grep "Hardware UUID" | awk '{print $3}')'",
        "hostname": "'$(hostname)'",
        "compliance_score": '$((4 - compliance_issues))'/4,
        "total_issues": '$compliance_issues',
        "checks": {
            "password_required": '$password_compliant',
            "timeout_compliant": '$timeout_compliant',
            "delay_compliant": '$delay_compliant',
            "guest_disabled": '$guest_compliant'
        },
        "settings": {
            "current_timeout": '$current_timeout',
            "current_delay": '$password_delay',
            "guest_account": "'$guest_enabled'"
        }
    }'
    
    # Save compliance status
    echo "$compliance_status" | jq . > "$STATUS_FILE"
    
    if [[ $compliance_issues -eq 0 ]]; then
        log_action "✅ Screen lock compliance check passed (4/4)"
    else
        log_action "⚠️  Screen lock compliance issues found: $compliance_issues/4"
    fi
    
    return $compliance_issues
}

# Auto-remediate compliance issues
auto_remediate_compliance() {
    log_action "Starting auto-remediation for compliance issues"
    
    # Check current compliance
    monitor_screen_lock_compliance
    local issues=$?
    
    if [[ $issues -eq 0 ]]; then
        log_action "No compliance issues found, skipping remediation"
        return 0
    fi
    
    log_action "Found $issues compliance issues, attempting remediation"
    
    # Re-apply enterprise policies
    apply_enterprise_policies
    
    # Wait and re-check compliance
    sleep 5
    monitor_screen_lock_compliance
    local remaining_issues=$?
    
    if [[ $remaining_issues -lt $issues ]]; then
        log_action "✅ Remediation successful: reduced issues from $issues to $remaining_issues"
    else
        log_action "⚠️  Remediation incomplete: $remaining_issues issues remain"
    fi
    
    return $remaining_issues
}

# Generate security report
generate_security_report() {
    log_action "Generating comprehensive security report"
    
    local report_file="/var/log/macfleet_security_report_$(date +%Y%m%d_%H%M%S).txt"
    
    {
        echo "MacFleet Screen Lock Security Report"
        echo "Generated: $(date)"
        echo "Device: $(hostname)"
        echo "Hardware UUID: $(system_profiler SPHardwareDataType | grep "Hardware UUID" | awk '{print $3}')"
        echo "macOS Version: $(sw_vers -productVersion)"
        echo "====================================="
        echo ""
        
        echo "Screen Lock Configuration:"
        echo "Password Required: $(osascript -e 'tell application "System Events" to get require password to wake of security preferences' 2>/dev/null || echo 'Unknown')"
        echo "Screen Saver Timeout: $(defaults read com.apple.screensaver idleTime 2>/dev/null || echo 'Not set') seconds"
        echo "Password Delay: $(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null || echo 'Not set') seconds"
        echo ""
        
        echo "Power Management Settings:"
        pmset -g | grep -E "(sleep|displaysleep|halfdim)"
        echo ""
        
        echo "Login Window Security:"
        echo "Guest Account: $(sudo defaults read /Library/Preferences/com.apple.loginwindow GuestEnabled 2>/dev/null || echo 'Unknown')"
        echo "Show Full Name: $(sudo defaults read /Library/Preferences/com.apple.loginwindow SHOWFULLNAME 2>/dev/null || echo 'Unknown')"
        echo "Hide Admin Users: $(sudo defaults read /Library/Preferences/com.apple.loginwindow Hide500Users 2>/dev/null || echo 'Unknown')"
        echo ""
        
        echo "Security Compliance Status:"
        if [[ -f "$STATUS_FILE" ]]; then
            cat "$STATUS_FILE"
        else
            echo "No compliance data available"
        fi
        
    } > "$report_file"
    
    log_action "Security report saved to: $report_file"
}

# Emergency lock function
emergency_lock() {
    log_action "Emergency lock initiated"
    
    # Method 1: Immediate display sleep
    pmset displaysleepnow
    
    # Method 2: Activate screen saver
    osascript -e 'tell application "System Events" to start current screen saver' 2>/dev/null
    
    # Method 3: Switch to login window
    /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend 2>/dev/null
    
    log_action "Emergency lock completed"
}

# Main screen lock management function
main() {
    local action="${1:-apply}"
    
    log_action "=== MacFleet Screen Lock Management Started ==="
    
    case "$action" in
        "apply")
            load_security_config
            apply_enterprise_policies
            ;;
        "monitor")
            monitor_screen_lock_compliance
            ;;
        "remediate")
            auto_remediate_compliance
            ;;
        "report")
            generate_security_report
            ;;
        "lock")
            emergency_lock
            ;;
        "status")
            monitor_screen_lock_compliance
            ;;
        *)
            echo "Usage: $0 [apply|monitor|remediate|report|lock|status]"
            echo "  apply     - Apply enterprise screen lock policies (default)"
            echo "  monitor   - Monitor compliance status"
            echo "  remediate - Auto-remediate compliance issues"
            echo "  report    - Generate comprehensive security report"
            echo "  lock      - Emergency lock device immediately"
            echo "  status    - Check current compliance status"
            exit 1
            ;;
    esac
    
    log_action "=== MacFleet Screen Lock Management Completed ==="
}

# Execute main function
main "$@"

Security Configuration File

Create a configuration file for enterprise security policies:

#!/bin/bash

# Create screen lock security configuration file
create_security_config() {
    local config_dir="/etc/macfleet"
    local config_file="$config_dir/screen_lock_config.conf"
    
    # Create directory if it doesn't exist
    sudo mkdir -p "$config_dir"
    
    # Create configuration file
    sudo tee "$config_file" > /dev/null << 'EOF'
# MacFleet Screen Lock Security Configuration
# All timeout values are in seconds unless specified

# Screen saver timeout (default: 300 seconds = 5 minutes)
SCREEN_TIMEOUT=300

# Password grace period after screen lock (default: 0 = immediate)
GRACE_PERIOD=0

# Display sleep timeout in minutes (default: 5 minutes)
DISPLAY_SLEEP=5

# System sleep timeout in minutes (default: 10 minutes)
SYSTEM_SLEEP=10

# Maximum allowed screen timeout for compliance (default: 600 seconds = 10 minutes)
MAX_SCREEN_TIMEOUT=600

# Maximum allowed password delay for compliance (default: 60 seconds)
MAX_PASSWORD_DELAY=60

# Lock screen message (optional)
LOCK_SCREEN_MESSAGE="This device is managed by MacFleet. Unauthorized access is prohibited."

# Hot corners configuration (optional)
ENABLE_HOT_CORNERS=true
HOT_CORNER_BR=5    # Bottom right: Start screen saver
HOT_CORNER_TR=10   # Top right: Put display to sleep

# Security enforcement options
DISABLE_GUEST_ACCOUNT=true
DISABLE_AUTO_LOGIN=true
HIDE_ADMIN_USERS=true
DISABLE_PASSWORD_HINTS=true
ENABLE_SECURE_VM=true

# Monitoring settings
COMPLIANCE_CHECK_INTERVAL=3600  # 1 hour
AUTO_REMEDIATION=true
GENERATE_REPORTS=true
EOF

    echo "Screen lock security configuration created at: $config_file"
    echo "Please review and modify settings according to your security policies"
}

create_security_config

Integration with MacFleet Management

#!/bin/bash

# MacFleet screen lock security integration
macfleet_security_integration() {
    echo "=== MacFleet Screen Lock Security Integration ==="
    
    # Device information
    local device_id=$(system_profiler SPHardwareDataType | grep "Hardware UUID" | awk '{print $3}')
    local hostname=$(hostname)
    local macos_version=$(sw_vers -productVersion)
    
    # Get current security status
    local password_required=$(osascript -e 'tell application "System Events" to get require password to wake of security preferences' 2>/dev/null || echo "unknown")
    local screen_timeout=$(defaults read com.apple.screensaver idleTime 2>/dev/null || echo "0")
    local password_delay=$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null || echo "unknown")
    
    # Security compliance assessment
    local compliance_score=0
    local total_checks=4
    
    [[ "$password_required" == "true" ]] && ((compliance_score++))
    [[ "$screen_timeout" -le 600 && "$screen_timeout" -gt 0 ]] && ((compliance_score++))
    [[ "$password_delay" -le 60 ]] && ((compliance_score++))
    
    local guest_disabled=$(sudo defaults read /Library/Preferences/com.apple.loginwindow GuestEnabled 2>/dev/null || echo "true")
    [[ "$guest_disabled" == "0" || "$guest_disabled" == "false" ]] && ((compliance_score++))
    
    # Report to MacFleet API
    local api_data='{
        "device_id": "'$device_id'",
        "hostname": "'$hostname'",
        "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'",
        "macos_version": "'$macos_version'",
        "screen_lock_security": {
            "password_required": "'$password_required'",
            "screen_timeout": '$screen_timeout',
            "password_delay": "'$password_delay'",
            "guest_account_disabled": "'$guest_disabled'",
            "compliance_score": '$compliance_score'/'$total_checks'
        },
        "security_management_status": "active"
    }'
    
    echo "Screen lock security status reported to MacFleet management system"
    echo "Device ID: $device_id"
    echo "Compliance Score: $compliance_score/$total_checks"
    echo "Password Required: $password_required"
    echo "Screen Timeout: $screen_timeout seconds"
}

macfleet_security_integration

macOS Version Compatibility

Version-Specific Considerations

#!/bin/bash

# Check macOS version compatibility
check_macos_compatibility() {
    local macos_version=$(sw_vers -productVersion)
    local major_version=$(echo "$macos_version" | cut -d. -f1)
    local minor_version=$(echo "$macos_version" | cut -d. -f2)
    
    echo "=== macOS Compatibility Check ==="
    echo "Current macOS version: $macos_version"
    
    # Check if version is supported (10.12 to 12.7)
    if [[ $major_version -eq 10 && $minor_version -ge 12 ]] || [[ $major_version -ge 11 && $major_version -le 12 ]]; then
        echo "✅ macOS version is supported"
        return 0
    elif [[ $major_version -ge 13 ]]; then
        echo "⚠️  macOS version may have limited support (testing recommended)"
        return 1
    else
        echo "❌ macOS version is not supported"
        return 2
    fi
}

check_macos_compatibility

Important Security Notes

Best Practices

  • Test on pilot devices before fleet-wide deployment
  • Regular compliance monitoring to ensure policy adherence
  • Backup current settings before applying new policies
  • Document policy changes for audit and troubleshooting purposes

Security Considerations

  • Immediate password requirement provides strongest security
  • Screen saver timeout should balance security with usability
  • Guest account disabled prevents unauthorized access
  • Lock screen messages provide contact information and legal notices

Troubleshooting

  • System Preferences refresh may be required for changes to appear
  • Administrator privileges needed for system-level security settings
  • Restart may be required for some power management changes
  • Test AppleScript commands individually if issues occur

Tutorial

Novas atualizações e melhorias para a Macfleet.

Configurando um Runner do GitHub Actions em um Mac Mini (Apple Silicon)

Runner do GitHub Actions

GitHub Actions é uma plataforma poderosa de CI/CD que permite automatizar seus fluxos de trabalho de desenvolvimento de software. Embora o GitHub ofereça runners hospedados, runners auto-hospedados fornecem maior controle e personalização para sua configuração de CI/CD. Este tutorial o guia através da configuração e conexão de um runner auto-hospedado em um Mac mini para executar pipelines do macOS.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um Mac mini (registre-se no Macfleet)
  • Um repositório GitHub com direitos de administrador
  • Um gerenciador de pacotes instalado (preferencialmente Homebrew)
  • Git instalado em seu sistema

Passo 1: Criar uma Conta de Usuário Dedicada

Primeiro, crie uma conta de usuário dedicada para o runner do GitHub Actions:

# Criar a conta de usuário 'gh-runner'
sudo dscl . -create /Users/gh-runner
sudo dscl . -create /Users/gh-runner UserShell /bin/bash
sudo dscl . -create /Users/gh-runner RealName "GitHub runner"
sudo dscl . -create /Users/gh-runner UniqueID "1001"
sudo dscl . -create /Users/gh-runner PrimaryGroupID 20
sudo dscl . -create /Users/gh-runner NFSHomeDirectory /Users/gh-runner

# Definir a senha para o usuário
sudo dscl . -passwd /Users/gh-runner sua_senha

# Adicionar 'gh-runner' ao grupo 'admin'
sudo dscl . -append /Groups/admin GroupMembership gh-runner

Mude para a nova conta de usuário:

su gh-runner

Passo 2: Instalar Software Necessário

Instale Git e Rosetta 2 (se estiver usando Apple Silicon):

# Instalar Git se ainda não estiver instalado
brew install git

# Instalar Rosetta 2 para Macs Apple Silicon
softwareupdate --install-rosetta

Passo 3: Configurar o Runner do GitHub Actions

  1. Vá para seu repositório GitHub
  2. Navegue para Configurações > Actions > Runners

Runner do GitHub Actions

  1. Clique em "New self-hosted runner" (https://github.com/<username>/<repository>/settings/actions/runners/new)
  2. Selecione macOS como imagem do runner e ARM64 como arquitetura
  3. Siga os comandos fornecidos para baixar e configurar o runner

Runner do GitHub Actions

Crie um arquivo .env no diretório _work do runner:

# arquivo _work/.env
ImageOS=macos15
XCODE_15_DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
  1. Execute o script run.sh em seu diretório do runner para completar a configuração.
  2. Verifique se o runner está ativo e ouvindo por trabalhos no terminal e verifique as configurações do repositório GitHub para a associação do runner e status Idle.

Runner do GitHub Actions

Passo 4: Configurar Sudoers (Opcional)

Se suas ações requerem privilégios de root, configure o arquivo sudoers:

sudo visudo

Adicione a seguinte linha:

gh-runner ALL=(ALL) NOPASSWD: ALL

Passo 5: Usar o Runner em Fluxos de Trabalho

Configure seu fluxo de trabalho do GitHub Actions para usar o runner auto-hospedado:

name: Fluxo de trabalho de exemplo

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: [self-hosted, macOS, ARM64]
    steps:
      - name: Instalar NodeJS
        run: brew install node

O runner está autenticado em seu repositório e rotulado com self-hosted, macOS, e ARM64. Use-o em seus fluxos de trabalho especificando estes rótulos no campo runs-on:

runs-on: [self-hosted, macOS, ARM64]

Melhores Práticas

  • Mantenha seu software do runner atualizado
  • Monitore regularmente os logs do runner para problemas
  • Use rótulos específicos para diferentes tipos de runners
  • Implemente medidas de segurança adequadas
  • Considere usar múltiplos runners para balanceamento de carga

Solução de Problemas

Problemas comuns e soluções:

  1. Runner não conectando:

    • Verifique conectividade de rede
    • Verifique validade do token GitHub
    • Certifique-se de permissões adequadas
  2. Falhas de build:

    • Verifique instalação do Xcode
    • Verifique dependências necessárias
    • Revise logs do fluxo de trabalho
  3. Problemas de permissão:

    • Verifique permissões do usuário
    • Verifique configuração sudoers
    • Revise permissões do sistema de arquivos

Conclusão

Agora você tem um runner auto-hospedado do GitHub Actions configurado em seu Mac mini. Esta configuração fornece mais controle sobre seu ambiente CI/CD e permite executar fluxos de trabalho específicos do macOS de forma eficiente.

Lembre-se de manter regularmente seu runner e mantê-lo atualizado com os patches de segurança e versões de software mais recentes.

Aplicativo Nativo

Aplicativo nativo do Macfleet

Guia de Instalação do Macfleet

Macfleet é uma solução poderosa de gerenciamento de frota projetada especificamente para ambientes Mac Mini hospedados na nuvem. Como provedor de hospedagem na nuvem Mac Mini, você pode usar o Macfleet para monitorar, gerenciar e otimizar toda sua frota de instâncias Mac virtualizadas.

Este guia de instalação o conduzirá através da configuração do monitoramento do Macfleet em sistemas macOS, Windows e Linux para garantir supervisão abrangente de sua infraestrutura na nuvem.

🍎 macOS

  • Baixe o arquivo .dmg para Mac aqui
  • Clique duas vezes no arquivo .dmg baixado
  • Arraste o aplicativo Macfleet para a pasta Aplicativos
  • Ejete o arquivo .dmg
  • Abra Preferências do Sistema > Segurança e Privacidade
    • Aba Privacidade > Acessibilidade
    • Marque Macfleet para permitir monitoramento
  • Inicie o Macfleet a partir de Aplicativos
  • O rastreamento inicia automaticamente

🪟 Windows

  • Baixe o arquivo .exe para Windows aqui
  • Clique com o botão direito no arquivo .exe > "Executar como administrador"
  • Siga o assistente de instalação
  • Aceite os termos e condições
  • Permita no Windows Defender se solicitado
  • Conceda permissões de monitoramento de aplicativo
  • Inicie o Macfleet a partir do Menu Iniciar
  • O aplicativo começa o rastreamento automaticamente

🐧 Linux

  • Baixe o pacote .deb (Ubuntu/Debian) ou .rpm (CentOS/RHEL) aqui
  • Instale usando seu gerenciador de pacotes
    • Ubuntu/Debian: sudo dpkg -i Macfleet-linux.deb
    • CentOS/RHEL: sudo rpm -ivh Macfleet-linux.rpm
  • Permita permissões de acesso X11 se solicitado
  • Adicione o usuário aos grupos apropriados se necessário
  • Inicie o Macfleet a partir do menu Aplicativos
  • O aplicativo começa o rastreamento automaticamente

Nota: Após a instalação em todos os sistemas, faça login com suas credenciais do Macfleet para sincronizar dados com seu painel de controle.