A comprehensive security auditing toolkit for Ubuntu systems using GOSS and Nix.
Three Powerful Tools:
cis-generate-spec- Capture complete machine baseline (packages, services, configs, etc.)ansible-to-goss- Convert Ansible playbooks to GOSS specificationscis-audit- Validate machines against CIS benchmarks or custom baselines
Use Cases:
- Audit Ubuntu servers against CIS benchmarks
- Create baselines from "golden" machines
- Validate infrastructure-as-code compliance
- Continuous compliance monitoring
nix run github:supabase/ubuntu-cis-audit#cis-audit -- --list# Using committed baseline
sudo nix run github:supabase/ubuntu-cis-audit#cis-audit -- --spec baselines/baseline.yml
# Using CIS benchmark
sudo nix run github:supabase/ubuntu-cis-audit#cis-audit -- --level 1 --profile server# Capture complete system state
sudo nix run github:supabase/ubuntu-cis-audit#cis-generate-spec -- my-baseline.yaml# Convert Ansible playbooks to GOSS spec
nix run github:supabase/ubuntu-cis-audit#ansible-to-goss ./ansible baseline.yamlgit clone https://github.com/supabase/ubuntu-cis-audit
cd ubuntu-cis-audit
nix developThis gives you access to:
- All audit tools (
cis-audit,cis-generate-spec,ansible-to-goss) - GOSS binary
- Development tools (yamllint, shellcheck, nixpkgs-fmt)
Validate a machine against CIS benchmarks or custom baselines.
# Use bundled baseline
sudo cis-audit --spec baselines/postgres-baseline.yml
# Use CIS benchmark
sudo cis-audit --level 1 --profile server
# JSON output
sudo cis-audit --spec baselines/baseline.yml --format json
# List available specs
cis-audit --listOptions:
-s, --spec <file>- Use specific spec file from bundled specs-l, --level <1|2>- CIS benchmark level-p, --profile <server|workstation>- System profile-f, --format <pretty|json|yaml|tap>- Output format--list- List all available specifications
Generate a comprehensive baseline from a running machine.
# Capture complete system state
sudo cis-generate-spec baseline.yamlCaptures:
- All installed packages (with versions)
- All systemd services (enabled/running state)
- All kernel parameters (sysctl)
- Critical file permissions
- All user accounts and groups
- Listening network ports
- System metadata
Requirements: Must run with sudo to access protected files.
Convert Ansible playbooks to GOSS specifications.
# Convert Ansible directory to GOSS spec
ansible-to-goss ./ansible-playbooks output.yamlExtracts:
apttasks →package:specssysctltasks →kernel-param:specssystemdtasks →service:specsfile/copytasks →file:specs
- Generate baseline from golden machine:
ssh admin@golden-server
sudo nix run github:supabase/ubuntu-cis-audit#cis-generate-spec -- baseline.yaml- Commit baseline to repo:
cp baseline.yaml ~/ubuntu-cis-audit/audit-specs/baselines/production-baseline.yaml
git add audit-specs/baselines/production-baseline.yaml
git commit -m "Add production baseline"
git push- Audit other machines:
# On any server
sudo nix run github:supabase/ubuntu-cis-audit#cis-audit -- --spec baselines/production-baseline.yaml- Convert Ansible to GOSS:
nix run github:supabase/ubuntu-cis-audit#ansible-to-goss ./ansible postgres-spec.yaml- Validate deployed servers:
sudo cis-audit --spec postgres-spec.yamlubuntu-cis-audit/
├── audit-specs/
│ ├── baselines/ # Custom baselines
│ │ ├── baseline.yml
│ │ └── README.md
│ ├── cis_level1_server.yaml # Pre-defined CIS benchmarks
│ └── cis_level2_server.yaml
├── flake.nix # Nix flake definition
├── treefmt.nix # Code formatting config
├── .yamllint # YAML linting rules
└── LICENSE # Apache 2.0
Pre-commit hooks are configured for:
- Shell script linting (shellcheck)
- Nix formatting (nixpkgs-fmt)
- YAML linting (yamllint)
# Format all files
nix fmt
# Run all checks
nix flake check- Generate baseline on target machine
- Copy to
audit-specs/baselines/ - Use descriptive name (e.g.,
postgres-production-baseline.yml) - Document in
audit-specs/baselines/README.md - Commit and push
- Nix (with flakes enabled)
- Target systems: Ubuntu 20.04+, aarch64 or x86_64
sudoaccess for auditing and baseline generation
Apache License 2.0 - see LICENSE
- Built with GOSS by Ahmed Elsabbahy
- Developed for Supabase
- CIS benchmarks from Center for Internet Security
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Run
nix flake check - Submit a pull request
- Issues: GitHub Issues
- Discussions: GitHub Discussions