Installation

Run cnspec as a service

Configure cnspec to run as a system service that automatically scans hosts and reports results to Mondoo Platform.

This document covers how to run cnspec as a service on hosts in your environment.

Configure cnspec to run as a service

When configured as a service, cnspec continuously assesses hosts by running policies configured in Mondoo Platform. By default, every 60 minutes, cnspec service:

  1. Connects to your account in the platform

  2. Retrieves and validates the latest policies enabled for it.

  3. Scans the host.

  4. Reports scan results back to the platform.

The installation places a systemd unit file at /etc/systemd/system/cnspec.service. However, it does not register or enable the service.

Before starting cnspec as a service, you should have already registered the host with your Mondoo Platform account.

Enable and start cnspec as a service

1. Reload systemd daemon and load the cnspec.service unit file
sudo systemctl daemon-reload
2. Enable cnspec to run during startup
sudo systemctl enable cnspec
3. Start cnspec service
sudo systemctl start cnspec
4. Check the status of cnspec
sudo systemctl status cnspec

cnspec service logging

cnspec service writes log events to the system logs. You can use this command to tail cnspec service logs on Linux hosts:

Tail cnspec service logs
sudo journalctl -u cnspec -f

The default log level is info, but can be configured as defined in cnspec configuration options below.

When installed on Windows, the mondoo package automatically registers with the Service Control Manager in Windows, but sets the default Startup Type to Manual and does not start the service.

Windows Default Service

Running as a service

Launch a PowerShell terminal as an administrator and run these commands:

Before starting cnspec as a service, you should have already registered the host with your Mondoo Platform account.

1. Set mondoo service to run automatically at startup
Set-Service -Name mondoo -StartupType Automatic
2. Start mondoo service
Set-Service -Name mondoo -Status Running
3. Validate mondoo is running as a service
Get-Service mondoo | Select-Object -Property Name, StartType, Status

mondoo running as a service

Mondoo service logging

Mondoo service writes logging events to the Windows Event Viewer Application logs. To view logs:

Windows Event Viewer showing Application logs

  1. Select the Start Menu and launch Event Viewer
  2. Expand Windows Logs
  3. Select Application to view application logs
  4. Use Find... to search for "cnspec"

If you installed cnspec using the PKG installer, a launchd service is created automatically. If you installed cnspec using Homebrew, you can manually create the service plist file at /Library/LaunchDaemons/com.mondoo.client.plist:

Create the com.mondoo.client.plist file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.mondoo.client</string>
	<key>ProgramArguments</key>
	<array>
		<string>/path/to/cnspec</string>
		<string>serve</string>
		<string>-t</string>
		<string>60</string>
		<string>--config</string>
		<string>/etc/opt/mondoo/mondoo.yml</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

You must replace "/path/to/cnspec" with the path to cnspec on your host. You can validate this by opening a terminal and running which cnspec. Also, ensure you specify the correct path to Mondoo Platform config ("/etc/opt/mondoo/mondoo.yml" in the example above), which can be validated by opening a terminal and running cnspec status. Additionally, you can adjust the scan frequency (60 minutes by default).

Load the Launchd Service
sudo launchctl load /Library/LaunchDaemons/com.mondoo.client.plist

To start, stop or check the status of the service, use the launchctl tool:

$ sudo launchctl start com.mondoo.client
$ sudo launchctl list | grep cnspec
-	1	com.mondoo.client

cnspec serve

In addition to leveraging the platform service management system, cnspec includes the cnspec serve command, which you can use on any supported platform (Linux, Windows, macOS) to continuously run assessments of hosts.

cnspec serve leverages the default configuration of the host if already registered.

Set a custom scan interval

Use the --timer flag to set a scan interval in minutes. The default is 60. For example, this runs a scan with cnspec serve every 15 minutes:

cnspec serve --timer 15

cnspec configuration options

cnspec configuration is stored on the host at this location:

  • Linux - /etc/opt/mondoo/mondoo.yml
  • Windows - C:\ProgramData\Mondoo\mondoo.yml

Common cnspec service configuration options:

NameDescription
agent_mrnAgent Mondoo resource name, identifies the client
api_endpointThe URL of Mondoo Platform (https://us.api.mondoo.com is the default)
certificateClient's public certificate
loglevelService log level: error, warn, info, debug, trace (default is info)
mrnService Account Mondoo resource name, which identifies the service account
private_keyClient's private key used to sign requests sent to Mondoo Platform
space_mrnSpace Mondoo resource name, identifies the space that the client belongs to
annotationsAnnotations that display in the Mondoo Console console.mondoo.com
mondoo.yml
# service account mrn
mrn: //agents.api.mondoo.app/spaces/spacex/serviceaccounts/1utIs5XUQ8XayfB6yiQNTLOqPlD
# agent mrn
agent_mrn: //agents.api.mondoo.app/spaces/spacex/agents/1utIqsjg3YSAF8hMMIhg8tBsTPP
# space mrn
space_mrn: //captain.api.mondoo.app/spaces/spacex
# api endpoint
api_endpoint: https://us.api.mondoo.com
# pem-encoded certificate
certificate: |
  -----BEGIN CERTIFICATE-----
  ...
  -----END CERTIFICATE-----
# pem-encoded private key
private_key: |
  -----BEGIN PRIVATE KEY-----
  ...
  -----END PRIVATE KEY-----
# log level: error, warn, info, debug, trace
loglevel: info
# tags
annotations:
  key1: value1
  key2: value2

cnspec inventory

You can define multiple scan targets, credentials, and discovery options in an inventory file. To learn more, read Remote scanning with inventory files.

To execute cnspec with an inventory file:

cnspec scan --inventory-file ./inventory.yml

On this page