mSCP 2.0 Beta
Currently in Beta Beta
mSCP 2.0 is under active development and should not be used in production. Please report any issues to the project. For production deployments, refer to mSCP 1.0.
mSCP 2.0 is a major architectural evolution — a unified codebase that eliminates the need for separate branches per macOS version.
What’s New
Section titled “What’s New”At a Glance
Section titled “At a Glance”| mSCP 1.0 | mSCP 2.0 | |
|---|---|---|
| Repository | Branch per macOS version | Single unified branch |
| Rules | One version per file | All versions in one file |
| References | Flat (800-53r5, disa_stig) | Nested (nist.800-53r5, disa.disa_stig) |
| Maintenance | Update each branch | Single source of truth |
Rule Comparison
Section titled “Rule Comparison”The biggest change is how rules handle multiple macOS versions:
mSCP 1.0 — Separate file per version in each branch:
macOS: ['15.0']references: cce: [CCE-94195-5] disa_stig: [APPL-15-002064]mSCP 2.0 — All versions in one file:
references: nist: cce: macos_26: [CCE-95195-4] macos_15: [CCE-94195-5] macos_14: [CCE-92795-4] disa: disa_stig: macos_26: [APPL-26-002064] macos_15: [APPL-15-002064] macos_14: [APPL-14-002064]
platforms: macOS: '26.0': benchmarks: - name: disa_stig severity: high '15.0': benchmarks: - name: disa_stig severity: highDirectory Structure
Section titled “Directory Structure”macos_security/├── config/│ ├── default/│ │ ├── rules/ # Rule YAML files│ │ │ ├── audit/│ │ │ ├── auth/│ │ │ ├── icloud/│ │ │ ├── os/│ │ │ ├── pwpolicy/│ │ │ ├── settings/│ │ │ └── system_settings/│ │ └── baselines/ # Baseline definitions│ ├── custom/ # User customizations│ ├── includes/ # Shared includes│ └── locales/ # Localization files├── src/│ └── mscp/ # Python CLI package│ ├── cli.py│ ├── admin_utils/│ ├── classes/│ ├── common_utils/│ └── generate/├── schema/ # YAML schema definitions├── rules → config/default/rules # Symlink├── baselines → config/default/baselines└── custom → config/customInstallation
Section titled “Installation”Option 1: Container (Recommended)
Section titled “Option 1: Container (Recommended)”The easiest way to get started — no local dependencies required.
Requirements:
- A container solution is required:
- Apple Container (Recommended)
- Docker
-
Create Local Folders
Section titled “Create Local Folders”Terminal window mkdir -p ~/Desktop/mscp/custom -
Run the Container
Section titled “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 Content
Section titled “Generate Content”config/custom/baselines/cis_lvl1_macos_26.0.yaml # Create a baseline./mscp.py baseline -k cis_lvl1# Generate guidance with all outputs./mscp.py guidance custom/baselines/cis_lvl1_macos_26.0.yaml -A# Output: MSCP DOCUMENT GENERATION COMPLETE! All documents in: /build/cis_lvl1_macos_26.0/
Option 2: Manual Method (Python + Ruby)
Section titled “Option 2: Manual Method (Python + Ruby)”Manual setup with virtual environment.
Requirements:
- Python >= 3.14
- Recommended: Macadmins Python
- Ruby >= 3.4.4
-
Clone the Repository
Section titled “Clone the Repository”Terminal window git clone -b dev_2.0 https://github.com/usnistgov/macos_security.gitcd macos_security -
Python Setup
Section titled “Python Setup”Terminal window # Create virtual environmentpython3 -m venv .venvsource .venv/bin/activate# Update and install toolspython3 -m pip install --upgrade pip setuptools wheelpython3 -m pip install --upgrade -r requirements.txtHaving Python version issues? Click to expand
Check your Python version:
Terminal window python3 --versionCheck version inside the venv:
Terminal window source .venv/bin/activatepython --versionList all installed Python versions:
Terminal window ls /opt/homebrew/bin/python3*ls /usr/local/bin/python3*Create venv with a specific version:
Terminal window # Remove old venv if neededrm -rf .venv# Use full path to the Python version you want/opt/homebrew/bin/python3.13 -m venv .venvsource .venv/bin/activate -
Ruby Setup
Section titled “Ruby Setup”Terminal window bundle config path mscp_gemsbundle config bin mscp_gems/binbundle installbundle binstubs --all -
Generate Content
Section titled “Generate Content”Terminal window # Create a baseline./mscp.py baseline -k cis_lvl1# Generate guidance with all outputs./mscp.py guidance custom/baselines/cis_lvl1_macos_26.0.yaml -A# When done, deactivate the virtual environmentdeactivate
Why the Change?
Section titled “Why the Change?”- Faster Updates — Rule changes apply to all versions at once
- Less Maintenance — No branch synchronization headaches
- Clear Version Support — See all supported versions in one file
- Version Overrides — Different checks per macOS version when needed
- Easier Contributions — Work in one branch, not many
Status
Section titled “Status”- Unified multi-version rule format
- Restructured references (nist/disa/cis)
- New directory layout
- Python package setup
- Full feature parity with 1.0
- CLI documentation
- Migration guide
- Production release
Get Involved
Section titled “Get Involved”Next Steps
Section titled “Next Steps”- Getting Started — Set up mSCP 1.0 or 2.0
- Quick Guide — Complete start to finish walkthrough
- Resources — Training and tools