Quick Guide
A complete start to finish walkthrough of the macOS Security Compliance Project. Install, generate your first baseline, and create compliance documents all in one page.
Prefer to install manually with Python and Ruby? See the Getting Started guide for the manual method.
Requirements:
- A container solution is required:
- Apple Container (Recommended)
- Docker
-
Create Local Folders
Terminal window mkdir -p ~/Desktop/mscp/custom -
Run the Container
Using Apple Container:
Terminal window container run -it \--volume ~/Desktop/mscp:/mscp/build \--volume ~/Desktop/mscp/custom:/mscp/custom \ghcr.io/usnistgov/macos_security:latestApple Container commands Click to expand
Start the container service (required before first run):
Terminal window container system startExit the container:
Terminal window exitStop the container service:
Terminal window container system stopCheck container service status:
Terminal window container system statusOr Using Docker:
Terminal window # Note: Docker requires full paths for volume mountsdocker run -it \--volume /Users/<username>/Desktop/mscp:/mscp/build \--volume /Users/<username>/Desktop/mscp/custom:/mscp/custom \ghcr.io/usnistgov/macos_security:latest -
Generate a Baseline
List baselines:
./mscp.py baseline -lGenerate:
./mscp.py baseline -k BASELINE_NAMEWith tailoring:
./mscp.py baseline -k BASELINE_NAME -tconfig/custom/baselines/cis_lvl1_macos_26.0.yaml # Example: Generate CIS Level 1 baseline./mscp.py baseline -k cis_lvl1 -
Generate Outputs
Terminal window ./mscp.py guidance custom/baselines/BASELINE_NAME.yaml [flags]Flag Output -AAll outputs -sCompliance script -pConfiguration profiles -dDDM components -xExcel spreadsheet -mMarkdown Example — Generate all outputs:
/build/cis_lvl1_macos_26.0/ ./mscp.py guidance custom/baselines/cis_lvl1_macos_26.0.yaml -A -
Use Your Files
Everything goes to
build/BASELINE_NAME/:build/cis_lvl1_macos_26.0/├── cis_lvl1_macos_26.0.adoc├── cis_lvl1_macos_26.0.html├── cis_lvl1_macos_26.0.pdf├── cis_lvl1_macos_26.0_compliance.sh├── mobileconfigs/├── preferences/├── activations/├── assets/└── configurations/
Interactive mode:
sudo ./build/cis_lvl1_macos_26.0/cis_lvl1_macos_26.0_compliance.shAutomated mode:
| Flag | What it does |
|---|---|
--check | Run checks only |
--fix | Run fixes only |
--cfc | Check → Fix → Check |
--stats | Show last run statistics |
--compliant | Report compliant count |
--non_compliant | Report non-compliant count |
--reset | Clear results for this baseline |
--reset-all | Clear results for all baselines |
--quiet=1 | Show failed/exempt only |
--quiet=2 | Minimal output |
# Quick checksudo ./build/cis_lvl1_macos_26.0/cis_lvl1_macos_26.0_compliance.sh --check
# Full remediationsudo ./build/cis_lvl1_macos_26.0/cis_lvl1_macos_26.0_compliance.sh --cfc --quiet=2mscp.py baseline — Creates the baseline YAML file.
| Flag | Purpose |
|---|---|
-l | List available baselines |
-k NAME | Generate baseline |
-t | Interactive tailoring |
-c | Show 800-53 controls |
--os_name | Target OS name |
--os_version | Target OS version |
mscp.py guidance — Generates all outputs from a baseline.
| Flag | Purpose |
|---|---|
-A | All outputs |
-s | Compliance script |
-p | Config profiles |
--consolidated-profile | Single consolidated profile |
--granular-profiles | Granular profiles |
-d | DDM components |
-x | Excel file |
-m | Markdown |
-l LOGO | Custom logo |
-L LANG | Language |
-H HASH | Sign profiles |
--audit_name NAME | Custom audit name |
--reference REF | Custom reference ID |
--dark | Dark mode output |
mscp.py scap — Generates SCAP/OVAL content.
| Flag | Purpose |
|---|---|
-x | XCCDF file |
-o | OVAL file |
-b NAME | Specific baseline |
-l | List tags |
mscp.py mapping — Generates control mappings.
Compliance Check — Scan a Mac for compliance issues:
./mscp.py baseline -k 800-53r5_moderate./mscp.py guidance custom/baselines/800-53r5_moderate_macos_26.0.yaml -ssudo ./build/800-53r5_moderate_macos_26.0/800-53r5_moderate_macos_26.0_compliance.sh --checkMDM Deployment Package — Generate profiles and DDM for device management:
./mscp.py baseline -k DISA-STIG./mscp.py guidance custom/baselines/DISA-STIG_macos_26.0.yaml -p -d -sFull Documentation Set — Create all outputs for documentation and audit:
./mscp.py baseline -k cis_lvl2./mscp.py guidance custom/baselines/cis_lvl2_macos_26.0.yaml -ARequirements:
- Python >= 3.12.1 (3.14 is not supported)
- Recommended: Macadmins Python
- Ruby >= 3.4.4 (optional — for PDF output)
-
Clone & Checkout Branch
Terminal window git clone https://github.com/usnistgov/macos_security.gitcd macos_securitygit checkout sequoiaReplace
sequoiawith your target macOS version (sequoia,sonoma,ventura, etc.). -
Install Dependencies
Terminal window # Create virtual environmentpython3 -m venv .venvsource .venv/bin/activate# Install requirementspip3 install -r requirements.txtRuby (optional — for PDF output):
Terminal window bundle install --binstubs --path mscp_gems -
Generate a Baseline
List baselines:
./scripts/generate_baseline.py -lGenerate:
./scripts/generate_baseline.py -k BASELINE_NAMEWith tailoring:
./scripts/generate_baseline.py -k BASELINE_NAME -tTerminal window # Example: Generate NIST 800-53 Moderate baseline./scripts/generate_baseline.py -k 800-53r5_moderate -
Generate Outputs
Run
generate_guidance.pywith the flags you need:Terminal window ./scripts/generate_guidance.py [flags] baselines/BASELINE_NAME.yamlFlag Output (none) Guidance docs ( .adoc,.html,.pdf)-sCompliance script -pConfiguration profiles (one per payload) -PSingle consolidated profile -DDDM components -xExcel spreadsheet Example — Generate all common outputs:
Terminal window ./scripts/generate_guidance.py -s -p -x baselines/800-53r5_moderate.yaml -
Use Your Files
Everything goes to
build/BASELINE_NAME/:build/800-53r5_moderate/├── 800-53r5_moderate.adoc├── 800-53r5_moderate.html├── 800-53r5_moderate.pdf├── 800-53r5_moderate_compliance.sh├── mobileconfigs/├── preferences/├── activations/ ← DDM (if -D used)├── assets/└── configurations/
Interactive mode:
sudo ./build/800-53r5_moderate/800-53r5_moderate_compliance.shAutomated mode:
| Flag | What it does |
|---|---|
--check | Run checks only |
--fix | Run fixes only |
--cfc | Check → Fix → Check |
--stats | Show last run statistics |
--compliant | Report compliant count |
--non_compliant | Report non-compliant count |
--reset | Clear results for this baseline |
--reset-all | Clear results for all baselines |
--quiet=1 | Show failed/exempt only |
--quiet=2 | Minimal output |
# Quick checksudo ./build/800-53r5_moderate/800-53r5_moderate_compliance.sh --check
# Full remediationsudo ./build/800-53r5_moderate/800-53r5_moderate_compliance.sh --cfc --quiet=2Example baselines (may vary by branch):
| Framework | Baseline Name |
|---|---|
| NIST 800-53 Rev 5 | 800-53r5_high, 800-53r5_moderate, 800-53r5_low |
| NIST 800-171 | 800-171 |
| DISA STIG | DISA-STIG |
| CIS Benchmarks | cis_lvl1, cis_lvl2, cisv8 |
| CMMC 2.0 | cmmc_lvl1, cmmc_lvl2 |
| CNSSI 1253 | cnssi-1253_high, cnssi-1253_moderate, cnssi-1253_low |
| All Rules | all_rules |
generate_baseline.py — Creates the baseline YAML file.
| Flag | Purpose |
|---|---|
-l | List available baselines |
-k NAME | Generate baseline |
-t | Interactive tailoring |
-c | Show 800-53 controls |
generate_guidance.py — Generates all outputs from a baseline.
| Flag | Purpose |
|---|---|
-s | Compliance script |
-p | Config profiles |
-P | Consolidated profile |
-D | DDM components |
-x | Excel file |
-l LOGO | Custom logo |
-H HASH | Sign profiles |
-a NAME | Custom audit name |
-r REF | Custom reference ID |
generate_scap.py — Generates SCAP/OVAL content for compliance scanning tools.
| Flag | Purpose |
|---|---|
-x | XCCDF file |
-o | OVAL file |
-b NAME | Specific baseline |
-d FILE | Include DISA STIG references from file |
-l | List tags |
Compliance Check — Scan a Mac for compliance issues:
./scripts/generate_baseline.py -k 800-53r5_moderate./scripts/generate_guidance.py -s baselines/800-53r5_moderate.yamlsudo ./build/800-53r5_moderate/800-53r5_moderate_compliance.sh --checkMDM Deployment Package — Generate profiles and DDM for device management:
./scripts/generate_baseline.py -k DISA-STIG -t./scripts/generate_guidance.py -p -D -s build/baselines/DISA-STIG.yamlFull Documentation Set — Create all outputs for documentation and audit:
./scripts/generate_baseline.py -k cis_lvl2./scripts/generate_guidance.py -s -p -x baselines/cis_lvl2.yaml