Operating systems · DEB · v0.1.0 · draft

Debian GNU/Linux

Secure configuration baseline for Debian systems, servers and desktops. Version-specific differences are handled per control with applicability.versions.

Debian GNU/Linux 12, 13161 controlsIDs CB-DEB-<domain>-NNN

Release v0.1.0 beta · pre-release, tag debian/v0.1.0: the active and deprecated controls it shipped. A beta published for testing: it may still change before a final release. Current state.

01

Controls

161 controls
IDControlSeverityAssessmentProfiles
CB-DEB-AUDIT-001Keep the systemd journal running, persistent, compressed and bounded in sizeSystem logs may be lost at reboot or fill the diskmediumautomatedautomated fixcore
CB-DEB-AUDIT-002Forward the journal to rsyslog only when rsyslog is the chosen loggerThe journal forwarding setting does not match the logging system in uselowautomatedautomated fixcore
CB-DEB-AUDIT-003Do not accept logs from other hostsThe system listens for log messages from the networkmediumautomatedautomated fixcore
CB-DEB-AUDIT-004Restrict access to log filesLog files are readable or writable by too many usersmediumautomatedautomated fixcore
CB-DEB-AUDIT-005Run rsyslog and create its log files with restricted permissionsrsyslog is installed but does not run, or writes logs readable by everyonelowautomatedautomated fixcore
CB-DEB-AUDIT-006Review which messages rsyslog writes and whereThe rsyslog rules have not been reviewed against the site logging needslowmanualcore
CB-DEB-AUDIT-007Rotate log files with logrotateText log files are never rotatedlowautomatedautomated fixcore
CB-DEB-AUDIT-008Send system logs to a remote log serverSystem logs are only stored on the system that produced themmediummanualcore
CB-DEB-AUDIT-009Encrypt and authenticate the rsyslog connection to the log serverLogs are sent to the log server without TLSmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-010Give each exposed service its own activity logService activity is mixed into general logs or not logged at alllowmanualserver-hardened
CB-DEB-AUDIT-011Install and run the audit daemonThe kernel audit records are not collectedmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-012Enable auditing from boot with a large enough backlogProcesses started before auditd are not auditedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-013Keep audit logs instead of rotating them awayOld audit logs are deleted automaticallymediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-014Decide and configure what happens when the audit disk fills upThe system keeps running without recording audit events when the audit log space runs outmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-015Send audit records to a remote serverAudit records are only stored on the audited systemmediumautomatedserver-hardened
CB-DEB-AUDIT-016Audit changes to sudo rights and commands run as another userChanges to administrator rights and use of other identities are not recordedmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-017Audit changes to the system clock and time zoneChanges to the system time are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-018Audit changes to the host name and network configurationChanges to the host identity and network settings are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-019Audit changes to accounts, groups and authentication settingsChanges to accounts and authentication settings are not recordedmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-020Audit changes to file permissions, owners and extended attributesChanges to file permissions and ownership are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-021Audit denied attempts to open or truncate filesFailed attempts to access files are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-022Audit file system mounts and unmounts by usersFile system mounts by users are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-023Audit file deletions and renames by usersFile deletions and renames by users are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-024Audit changes to the AppArmor configurationChanges to the mandatory access control policy are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-025Audit kernel module loading and unloadingKernel modules can be loaded or removed without a recordmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-026Audit every use of setuid and setgid programsUse of privileged programs is not recordedmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-027Audit login records and session filesTampering with login records is not detectedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-028Audit changes to scheduled tasks and to the systemd journalChanges to scheduled tasks and journal files are not recordedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-029Lock the audit configuration and load every valid ruleThe audit rules can be changed or disabled on the running systemmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-030Restrict access to the audit logsAudit logs can be read or changed by users other than rootmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-031Restrict access to the audit configuration and toolsAudit configuration or tools can be changed by users other than rootmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-032Install the AIDE file integrity checkerNo file integrity checker is installedmediumautomatedautomated fixcore
CB-DEB-AUDIT-033Check the integrity of the audit tools with AIDEA modified audit tool would not be detectedlowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUDIT-034Build the AIDE database and check file integrity every dayFile integrity is never checkedmediumautomatedautomated fixcore
CB-DEB-AUDIT-035Keep a protected copy of the AIDE databaseThe AIDE reference database is only stored on the system it protectsmediummanualserver-hardened, desktop-hardened
CB-DEB-AUTH-001Show a legal warning before login, without system detailsThe login prompt shows the operating system version and no legal warninglowautomatedautomated fixcore
CB-DEB-AUTH-002Keep system details out of the message of the dayThe message of the day shows the kernel version to every user who logs inlowautomatedautomated fixcore
CB-DEB-AUTH-003Protect the login banner files from modificationLogin banner files can be changed by non-root userslowautomatedautomated fixcore
CB-DEB-AUTH-004Install sudo for administrative accesssudo is not installedmediumautomatedautomated fixcore
CB-DEB-AUTH-005Configure sudo to use a pseudo-terminal, a log file and a short credential cachesudo defaults allow terminal hijacking, keep no local log or cache credentials too longmediumautomatedautomated fixcore
CB-DEB-AUTH-006Require a password for every sudo ruleSome sudo rules run commands without asking for a passwordhighautomatedserver-hardened, desktop-hardened
CB-DEB-AUTH-007Never disable authentication for sudo globallysudo is configured to skip authenticationhighautomatedcore
CB-DEB-AUTH-008Restrict the su command to an empty groupAny user who knows a target password can switch user with sumediumautomatedautomated fixcore
CB-DEB-AUTH-009Write sudo rules with least privilegesudo rules give broader rights than the tasks needmediummanualcore
CB-DEB-AUTH-010Enforce password quality with pam_pwqualityUsers can set short or trivial passwordsmediumautomatedautomated fixcore
CB-DEB-AUTH-011Lock accounts after repeated failed loginsPasswords can be guessed without limitmediumautomatedautomated fixcore
CB-DEB-AUTH-012Prevent reuse of recent passwordsUsers can set a password they used beforelowautomatedautomated fixcore
CB-DEB-AUTH-013Refuse empty passwords and hash passwords with a strong algorithm in pam_unixpam_unix accepts accounts with an empty passwordhighautomatedautomated fixcore
CB-DEB-AUTH-014Set password aging and hashing defaults for new accountsNew accounts get passwords that never expire and are never disabled when unusedlowautomatedautomated fixcore
CB-DEB-AUTH-015Apply the password aging policy to existing accountsExisting accounts keep passwords that never expirelowautomatedautomated fixcore
CB-DEB-AUTH-016Keep root the only superuser account and protect its passwordAnother account has superuser identity, or root has no password protectionhighautomatedcore
CB-DEB-AUTH-017Keep the root PATH free of relative and writable directoriesThe root login PATH contains a relative or writable directorymediumautomatedcore
CB-DEB-AUTH-018Prevent interactive logins to system accountsA system account has a login shell or an unlocked passwordmediumautomatedautomated fixcore
CB-DEB-AUTH-019Set a restrictive default umask for login sessionsNew files are readable by every local user by defaultlowautomatedautomated fixcore
CB-DEB-AUTH-020Close idle shell sessions automaticallyIdle shell sessions stay open foreverlowautomatedautomated fixcore
CB-DEB-AUTH-021Do not list nologin as a valid shellnologin is declared as a valid login shelllowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-AUTH-022Disable reboot with Ctrl-Alt-Del on the consoleAnyone at the console can reboot the system with Ctrl-Alt-Dellowautomatedautomated fixserver-hardened
CB-DEB-AUTH-023Disable accounts that are no longer usedAccounts of people or services that left are still activemediummanualcore
CB-DEB-AUTH-024Give each service its own dedicated accountSeveral services share one account, or run as a person's accountmediummanualcore
CB-DEB-AUTH-025Replace default secrets right after installationSecrets set by the installer, an image or a vendor are still in usehighmanualserver-hardened, desktop-hardened
CB-DEB-AUTH-026Store every password hash in shadow and leave no account without a passwordAn account has its password hash in /etc/passwd, or an empty passwordhighautomatedautomated fixcore
CB-DEB-AUTH-027Keep the user and group databases consistentUser and group files contain duplicates or dangling referencesmediumautomatedcore
CB-DEB-AUTH-028Keep the shadow group emptyUsers are members of the shadow grouphighautomatedautomated fixcore
CB-DEB-AUTH-029Keep user home directories and dot files privateUser home directories or startup files are readable or writable by othersmediumautomatedautomated fixcore
CB-DEB-BOOT-001Enable full address space layout randomizationMemory layout of processes is predictablemediumautomatedautomated fixcore
CB-DEB-BOOT-002Hide kernel addresses from usersKernel memory addresses are exposed through /proc and other interfacesmediumautomatedautomated fixcore
CB-DEB-BOOT-003Restrict the kernel log buffer to privileged usersUnprivileged users can read the kernel log bufferlowautomatedautomated fixcore
CB-DEB-BOOT-004Restrict ptrace to descendant processesAny process can trace and read the memory of other processes of the same usermediumautomatedautomated fixcore
CB-DEB-BOOT-005Disable core dumps of setuid programsPrivileged programs can write their memory to core dump filesmediumautomatedautomated fixcore
CB-DEB-BOOT-006Protect symbolic links in world-writable sticky directoriesSymbolic links in shared temporary directories are followed for any usermediumautomatedautomated fixcore
CB-DEB-BOOT-007Protect hard links to files the user does not ownUsers can create hard links to files they do not ownmediumautomatedautomated fixcore
CB-DEB-BOOT-008Install and enable AppArmorAppArmor mandatory access control is not activemediumautomatedautomated fixcore
CB-DEB-BOOT-009Stop unconfined unprivileged processes from switching AppArmor profilesUnprivileged unconfined processes can move to a more permissive AppArmor profilelowautomatedautomated fixcore
CB-DEB-BOOT-010Keep no AppArmor profile in complain modeSome AppArmor profiles only log violations instead of blocking themmediumautomatedserver-hardened, desktop-hardened
CB-DEB-BOOT-011Protect the boot loader configuration with a passwordAnyone at the console can edit the boot entriesmediumautomatedcore
CB-DEB-BOOT-012Restrict access to the boot loader configurationUsers can read the boot loader configurationlowautomatedautomated fixcore
CB-DEB-BOOT-013Disable core dumpsCrashing programs can write their memory to disklowautomatedautomated fixcore
CB-DEB-DESK-001Disable automatic mounting of removable media in GNOMEGNOME mounts and opens removable media as soon as they are plugged inmediumautomatedautomated fixserver, desktop-hardened
CB-DEB-DESK-002Show a warning banner and hide the user list on the GDM login screenThe GDM login screen lists local accounts and shows no warningmediumautomatedautomated fixdesktop
CB-DEB-DESK-003Lock GNOME sessions after a short inactivity delayUsers can extend or disable the GNOME inactivity lockmediumautomatedautomated fixdesktop
CB-DEB-DESK-004Never run software automatically from inserted media in GNOMEGNOME can start programs from inserted mediamediumautomatedautomated fixdesktop
CB-DEB-DESK-005Disable XDMCP in the display managerThe display manager accepts XDMCP remote loginshighautomatedautomated fixdesktop
CB-DEB-DESK-006Require a password at the graphical login, without automatic login or guest sessionThe display manager opens a session without a passwordhighautomatedautomated fixdesktop
CB-DEB-DESK-007Refuse root logins at the graphical login screenroot can open a graphical sessionmediumautomatedautomated fixdesktop
CB-DEB-DESK-008Lock idle sessions outside GNOME, through logind and the KDE screen lockerIdle sessions of desktops other than GNOME may never lockmediumautomatedautomated fixdesktop
CB-DEB-DESK-009Lock the session when the screen saver starts and when the system suspendsUsers can turn off the screen lock, including on suspend and lid closemediumautomatedautomated fixdesktop
CB-DEB-DESK-010Decide whether to turn off Wayland sessions in GDM (recommended - skip)GDM starts Wayland sessions, which run X11 programs through Xwaylandlowmanualserver-hardened, desktop-hardened
CB-DEB-DESK-011Remove the Ctrl-Alt-Del shortcut from GNOMECtrl-Alt-Del in GNOME opens the power-off and restart dialoglowautomatedautomated fixdesktop-hardened
CB-DEB-DESK-012Allow only known USB devices with USBGuardAny USB device plugged into the machine is acceptedmediumautomatedautomated fixdesktop-hardened
CB-DEB-FS-001Block kernel modules for filesystems the system does not useThe kernel can load modules for rarely used filesystemslowautomatedautomated fixcore
CB-DEB-FS-002Block USB mass storage and FireWire kernel modulesUSB storage devices and FireWire can be used on the systemmediumautomatedautomated fixserver, desktop-hardened
CB-DEB-FS-003Mount /tmp as a separate filesystem with nodev, nosuid and noexecPrograms can be run, or device files and setuid programs used, from /tmpmediumautomatedautomated fixcore
CB-DEB-FS-004Mount /dev/shm with nodev, nosuid and noexecPrograms can be run from the shared memory filesystemmediumautomatedautomated fixcore
CB-DEB-FS-005Put /home, /var, /var/tmp, /var/log and /var/log/audit on separate filesystemsUser data, variable data and logs share the root filesystemlowautomatedserver-hardened, desktop-hardened
CB-DEB-FS-006Mount separate filesystems with nodev, nosuid and noexec where they are not neededSeparate filesystems are mounted without restrictive optionslowautomatedcore
CB-DEB-FS-007Protect the user, group and password database filesThe account database files have weak ownership or permissionshighautomatedautomated fixcore
CB-DEB-FS-008Leave no world-writable file, and set the sticky bit on world-writable directoriesFiles can be changed by any user, or shared directories let users delete each other's filesmediumautomatedautomated fixcore
CB-DEB-FS-009Leave no file without a known owner or groupSome files belong to a user or group that does not existlowautomatedcore
CB-DEB-FS-010Review setuid and setgid programs and keep only those that are neededUnexpected setuid or setgid programs are presentmediumpartialcore
CB-DEB-FS-011Keep system programs and libraries owned by root and not writable by othersSystem programs or libraries can be changed by a non-root accounthighautomatedcore
CB-DEB-FS-012Encrypt the disks holding the system and dataFile systems or swap are stored unencrypted on diskmediumautomateddesktop-hardened
CB-DEB-NET-001Decide whether IPv6 is used, and disable or secure it accordinglyIPv6 is active without a decision to use itlowmanualcore
CB-DEB-NET-002Prevent loading of unused network protocol modulesRarely used network protocol modules can be loaded on demandmediumautomatedautomated fixcore
CB-DEB-NET-003Disable wireless network interfaces on serversA wireless network interface is available on a servermediumautomatedserver
CB-DEB-NET-004Disable the Bluetooth serviceThe Bluetooth service can be startedmediumautomatedautomated fixserver, desktop-hardened
CB-DEB-NET-005Run exactly one host firewallNo host firewall is active, or several firewall tools compete for the same ruleshighautomatedautomated fixcore
CB-DEB-NET-006Drop incoming and forwarded traffic by default, with SSH allowedThe host firewall accepts incoming or forwarded traffic that no rule allowshighautomatedautomated fixcore
CB-DEB-NET-007Drop outgoing traffic by defaultThe host firewall lets the system open any outgoing connectionmediumautomatedserver-hardened, desktop-hardened
CB-DEB-NET-008Restrict access to firewall and IPsec configuration filesFirewall or IPsec configuration files can be changed or read by non-root usersmediumautomatedautomated fixcore
CB-DEB-NET-009Disable IP forwarding unless the system is a routerThe system forwards packets between networksmediumautomatedautomated fixcore
CB-DEB-NET-010Ignore ICMP redirects and source-routed packets, and send no redirectsThe kernel accepts route changes or routing instructions from the networkmediumautomatedautomated fixcore
CB-DEB-NET-011Drop and log packets with spoofed source addressesThe kernel accepts packets whose source address cannot be genuine, without logging themmediumautomatedautomated fixcore
CB-DEB-NET-012Harden ICMP and TCP handling against floods and bogus packetsThe kernel ICMP and TCP settings leave the system open to simple floods and protocol abuselowautomatedautomated fixcore
CB-DEB-NET-013Restrict ARP answers and ignore gratuitous ARPThe kernel answers and accepts ARP messages beyond what the local network needslowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-NET-014Ignore IPv6 router advertisementsThe kernel configures IPv6 addresses and routes from any router advertisementmediumautomatedautomated fixcore
CB-DEB-NET-015Use only strong ciphers, MACs and key exchange algorithms in the SSH serverThe SSH server accepts weak or outdated cryptographic algorithmsmediumautomatedautomated fixcore
CB-DEB-NET-016Restrict SSH authentication to named accounts with strong methodsThe SSH server allows root logins, weak authentication methods or unlimited guessinghighautomatedautomated fixcore
CB-DEB-NET-017Limit SSH connections and close dead sessionsThe SSH server keeps dead sessions open and accepts many concurrent unauthenticated connectionslowautomatedautomated fixcore
CB-DEB-NET-018Disable SSH forwardingSSH sessions can forward ports, sockets, X11 and the SSH agentmediumautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-NET-019Log SSH logins with enough detailThe SSH server logs too little to trace loginslowautomatedautomated fixcore
CB-DEB-NET-020Show the legal warning banner before SSH authenticationThe SSH server shows no warning before authenticationlowautomatedautomated fixcore
CB-DEB-NET-021Limit SSH logins to the users and groups that need themEvery account with a valid credential can log in over SSHmediummanualcore
CB-DEB-NET-022Protect the SSH server configuration and host keysSSH server configuration or host keys can be read or changed by non-root usershighautomatedautomated fixcore
CB-DEB-PKG-001Bind every APT repository to its signing keyAPT repositories are not bound to a signing key or bypass signature checkshighautomatedautomated fixcore
CB-DEB-PKG-002Download packages over HTTPSAPT downloads from repositories over an unencrypted protocollowautomatedautomated fixcore
CB-DEB-PKG-003Keep APT signature, freshness and TLS checks enabledAPT is configured to accept unsigned, weakly signed, outdated or unverified repositorieshighautomatedautomated fixcore
CB-DEB-PKG-004Restrict write access to APT keys and repository listsNon-root users can change the APT keys or repository listsmediumautomatedautomated fixcore
CB-DEB-PKG-005Restrict access to APT repository credentialsAPT repository credentials are readable or writable by other usersmediumautomatedautomated fixcore
CB-DEB-PKG-006Configure the Debian security repositoryThe Debian security repository is not configuredhighautomatedcore
CB-DEB-PKG-007Install security updates automaticallySecurity updates are not installed automaticallymediumautomatedautomated fixcore
CB-DEB-PKG-008Leave no security update pendingSecurity updates are available but not installedmediumautomatedcore
CB-DEB-PKG-009Run a Debian release that still receives security updatesThe Debian release is no longer supportedhighautomatedcore
CB-DEB-PKG-010Install only the packages the system needsPackages without a use on this system are installedlowmanualcore
CB-DEB-PKG-011Do not install recommended and suggested packages automaticallyAPT installs recommended packages automaticallylowautomatedautomated fixserver-hardened, desktop-hardened
CB-DEB-SVC-001Disable DHCP and DNS server services the system does not provideDHCP or DNS server services can run on a system that does not provide themmediumautomatedautomated fixcore
CB-DEB-SVC-002Disable file transfer and file sharing server services the system does not provideFTP, TFTP, rsync or Samba servers can run on a system that does not provide themmediumautomatedautomated fixcore
CB-DEB-SVC-003Remove the NFS server and disable rpcbind when the system does not provide themThe NFS server or rpcbind can run on a system that does not need themmediumautomatedautomated fixcore
CB-DEB-SVC-004Disable LDAP and NIS directory server services the system does not provideAn LDAP or NIS directory server can run on a system that does not provide onemediumautomatedautomated fixcore
CB-DEB-SVC-005Disable IMAP and POP3 mail access servers the system does not provideAn IMAP or POP3 server can run on a system that does not provide mailboxesmediumautomatedautomated fixcore
CB-DEB-SVC-006Disable the SNMP agent and trap receiver when they are not usedAn SNMP agent or trap receiver can run on a system that is not monitored through SNMPmediumautomatedautomated fixcore
CB-DEB-SVC-007Remove telnet, rsh and talk servers and disable inetd super-serversClear-text remote access servers or an inetd super-server are presenthighautomatedautomated fixcore
CB-DEB-SVC-008Disable web server services on systems that do not serve web contentA web server can run on a system that does not serve web contentmediumautomatedautomated fixcore
CB-DEB-SVC-009Disable the Squid web proxy on systems that are not proxy serversA web proxy can run on a system that is not a proxy servermediumautomatedautomated fixcore
CB-DEB-SVC-010Restrict the mail transfer agent to local deliveryThe mail transfer agent accepts connections from the networkmediumautomatedautomated fixcore
CB-DEB-SVC-011Forward mail for root to a monitored mailboxMail sent to root stays unread on the systemlowautomatedcore
CB-DEB-SVC-012Only approved services listen on network interfacesServices nobody approved accept connections from the networkmediumpartialcore
CB-DEB-SVC-013Remove clear-text network clients (NIS, rsh, talk, telnet, LDAP tools, FTP)Clients for clear-text or obsolete network protocols are installedlowautomatedautomated fixcore
CB-DEB-SVC-014Run exactly one time synchronization daemonThe system clock is not synchronized, or several daemons fight over itmediumautomatedcore
CB-DEB-SVC-015Configure systemd-timesyncd with approved time servers and keep it runningsystemd-timesyncd uses built-in fallback servers or is not runninglowautomatedautomated fixcore
CB-DEB-SVC-016Configure chrony with time sources, run it unprivileged and keep it runningchrony has no time source, runs as root or is not runninglowautomatedautomated fixcore
CB-DEB-SVC-017Keep the cron daemon enabled and runningThe cron daemon is installed but not runninglowautomatedautomated fixcore
CB-DEB-SVC-018Restrict the system crontab and cron directories to rootUsers can read the system cron jobsmediumautomatedautomated fixcore
CB-DEB-SVC-019Allow only listed users to schedule jobs with crontab and atAny local user can schedule jobs with crontab or atmediumautomatedautomated fixcore
CB-DEB-SVC-020Encrypt SSSD LDAP connections and verify the server certificateSSSD talks to the LDAP directory without TLS or without checking the server certificatehighautomatedcore
CB-DEB-SVC-021Disable the autofs automounterThe autofs automounter can mount file systems on demandmediumautomatedautomated fixserver, desktop-hardened
CB-DEB-SVC-022Disable the Avahi mDNS/DNS-SD daemonAvahi announces the system and its services on the local networkmediumautomatedautomated fixserver, desktop-hardened
CB-DEB-SVC-023Disable the CUPS print server and printer discoveryThe CUPS print service runs on a system that does not printmediumautomatedautomated fixserver, desktop-hardened
CB-DEB-SVC-024Remove the X Window System server from serversAn X Window System server is installed on a serverlowautomatedautomated fixserver-hardened
CB-DEB-SVC-025Confine services with systemd sandboxing optionsNetwork-facing services run with the full privileges systemd gives by defaultmediumpartialserver-hardened
CB-DEB-SVC-026Disable the kdump kernel crash dump serviceKernel crash dumps are collected on the systemlowautomatedautomated fixserver-hardened
CB-DEB-SVC-027Remove the NFS client utilities when no NFS share is mountedNFS client utilities are installed on a system that mounts no NFS sharelowautomatedautomated fixserver-hardened
02

Profiles

Core core
Settings every Debian system should apply, server or desktop. Low operational impact. 103 controls.
Server server
Core plus settings for headless servers. Extends core: applies every one of its controls too. 110 controls.
Server hardened server-hardened
Stronger settings for exposed or sensitive servers. May break some workloads. Extends server: applies every one of its controls too. 150 controls.
Desktop desktop
Core plus settings for workstations with a graphical session. Extends core: applies every one of its controls too. 111 controls.
Desktop hardened desktop-hardened
Stronger settings for admin or mobile workstations. May hinder some uses. Extends desktop: applies every one of its controls too. 153 controls.
03

Domains

Boot & system hardening CB-DEB-BOOT-NNN
13 controls.
Accounts & authentication CB-DEB-AUTH-NNN
29 controls.
Network CB-DEB-NET-NNN
22 controls.
Services CB-DEB-SVC-NNN
27 controls.
Filesystem & permissions CB-DEB-FS-NNN
12 controls.
Logging & auditing CB-DEB-AUDIT-NNN
35 controls.
Desktop environment CB-DEB-DESK-NNN
12 controls.
Packages & updates CB-DEB-PKG-NNN
11 controls.
04

Facts

22 detected

Conditions a scanner detects on its own, once per target. A control, check or fix that needs a false fact is not applicable there.

OpenSSH server is installed openssh-server
Used by 9 controls.
name: openssh-server
state: installed
sudo is installed sudo
Used by 4 controls.
name: sudo
state: installed
auditd is installed auditd
Used by 0 controls.
name: auditd
state: installed
rsyslog is installed rsyslog
Used by 4 controls.
name: rsyslog
state: installed
chrony is installed chrony
Used by 1 control.
name: chrony
state: installed
systemd-timesyncd is installed systemd-timesyncd
Used by 1 control.
name: systemd-timesyncd
state: installed
ufw is installed ufw
Used by 3 controls.
name: ufw
state: installed
nftables is installed nftables
Used by 2 controls.
name: nftables
state: installed
systemd-coredump is installed systemd-coredump
Used by 1 control.
name: systemd-coredump
state: installed
cron is installed cron
Used by 3 controls.
name: cron
state: installed
GNOME Display Manager is installed gdm
Used by 4 controls.
name: gdm3
state: installed
GNOME desktop is installed desktop-gnome
Used by 5 controls.
name: gnome-shell
state: installed
KDE Plasma desktop is installed desktop-kde
Used by 2 controls.
name: plasma-workspace
state: installed
Xfce desktop is installed desktop-xfce
Used by 0 controls.
name: xfce4-session
state: installed
IPv6 is enabled in the kernel ipv6
Used by 3 controls.
script: test -d /proc/sys/net/ipv6
GRUB is the boot loader grub
Used by 3 controls.
script: test -f /boot/grub/grub.cfg
LightDM display manager is installed lightdm
Used by 2 controls.
name: lightdm
state: installed
SDDM display manager is installed sddm
Used by 1 control.
name: sddm
state: installed
The kernel has USB support usb
Used by 1 control.
script: test -d /sys/bus/usb
A mail transfer agent is installed mta
Used by 2 controls.
script: test -x /usr/sbin/sendmail
at is installed at
Used by 1 control.
name: at
state: installed
SSSD LDAP provider is installed sssd-ldap
Used by 1 control.
name: sssd-ldap
state: installed
05

Versions

2 released
VersionReleasedControlsFiles
mainunreleased, v0.1.0 in progresssource
v0.1.1 beta · pre-release2026-10-19161release archive
v0.1.0 beta · pre-release2026-10-18161release archive

A release is the git tag debian/v<version>: a zip with the controls and their translations, bundle.json, index.json, an OSCAL catalog and profiles, and per profile the generated audit.sh, remediate.sh and Ansible role.

06

Run it

v0.1.0 beta · pre-release

Each release ships, per profile, scripts generated from its controls. They need only POSIX sh, run on the machine itself and send nothing anywhere. Profiles in v0.1.0: core, server, server-hardened, desktop, desktop-hardened.

# Warning: do not execute code or commands that you don't understand
# Download the release and check its checksum
curl -LO https://github.com/cirsec/baselines/releases/download/debian/v0.1.0/cirsec-baselines-debian-0.1.0.zip
curl -LO https://github.com/cirsec/baselines/releases/download/debian/v0.1.0/cirsec-baselines-debian-0.1.0.zip.sha256
sha256sum -c cirsec-baselines-debian-0.1.0.zip.sha256
unzip -q cirsec-baselines-debian-0.1.0.zip
cd cirsec-baselines-debian-0.1.0/generated/server

# Audit: changes nothing, prints a report, writes the result JSON here
sudo sh audit.sh

# Fix what failed: dry run first, then apply
sudo sh remediate.sh
sudo sh remediate.sh --apply
The report
A summary and a score, then the failures by severity with the observed and expected values, the checks that could not run, and what to check by hand. Colors on a terminal only, none with NO_COLOR. --verbose lists every entry.
The result JSON
On a terminal it goes to cirsec-result-<host>-<date>.json; redirected (sudo sh audit.sh > result.json) it goes to stdout, for a pipeline or a dashboard. Format: result.schema.json. audit.sh exits 1 when anything fails or cannot run.
Fixes
remediate.sh runs a fix only where its check fails and checks again after. Files are backed up under /var/backups/cirsec/ first, services restart once at the end, and it says when a reboot or a new login is needed. Fixes that can cut off administrative access stay off unless a tailoring file opts in.
One control, or Ansible
controls/<ID>.sh check runs one control (exit 0 pass, 1 fail, 2 not applicable, 3 error, 4 manual). The ansible/ folder holds the same checks and fixes as a role: ansible-playbook -i <host>, ansible/site.yml --check.
Your own settings
A tailoring file picks the profile, tunes parameters within their bounds and excludes controls with a reason. Regenerate the scripts with it: python tools/generate.py --standard debian --tailoring yours.yml.
07

Written from

Maintained by1

Text under CC BY 4.0, code under Apache 2.0 · Source _standard.yml